成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解

MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解

熱門標簽:商家地圖標注哪個好 合肥營銷外呼系統(tǒng)收費 陜西400電話如何申請 承德電腦地圖標注 深圳 外呼系統(tǒng)從哪買 地圖標注賺錢真假 遵義地圖標注app 德惠市地圖標注

前言

想必玩過mysql的人對Waiting for table metadata lock肯定不會陌生,一般都是進行alter操作時被堵住了,導(dǎo)致了我們在show processlist 時,看到線程的狀態(tài)是在等metadata lock。本文會對MySQL表結(jié)構(gòu)變更的Metadata Lock進行詳細的介紹。

在線上進行DDL操作時,相對于其可能帶來的系統(tǒng)負載,其實,我們最擔心的還是MDL其可能導(dǎo)致的阻塞問題。

一旦DDL操作因獲取不到MDL被阻塞,后續(xù)其它針對該表的其它操作都會被阻塞。典型如下,如阻塞稍久的話,我們會看到Threads_running飆升,CPU告警。

mysql> show processlist;
+----+-----------------+-----------+-----------+---------+------+---------------------------------+------------------------------------+
| Id | User | Host | db | Command | Time | State  | Info  |
+----+-----------------+-----------+-----------+---------+------+---------------------------------+------------------------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 122 | Waiting on empty queue | NULL  |
| 9 | root | localhost | NULL | Sleep | 57 |   | NULL  |
| 12 | root | localhost | employees | Query | 40 | Waiting for table metadata lock | alter table slowtech.t1 add c1 int |
| 13 | root | localhost | employees | Query | 35 | Waiting for table metadata lock | select * from slowtech.t1 |
| 14 | root | localhost | employees | Query | 30 | Waiting for table metadata lock | select * from slowtech.t1 |
| 15 | root | localhost | employees | Query | 19 | Waiting for table metadata lock | select * from slowtech.t1 |
| 16 | root | localhost | employees | Query | 10 | Waiting for table metadata lock | select * from slowtech.t1 |
| 17 | root | localhost | employees | Query | 0 | starting  | show processlist  |
+----+-----------------+-----------+-----------+---------+------+---------------------------------+------------------------------------+
rows in set (0.00 sec)

如果發(fā)生在線上,無疑會影響到業(yè)務(wù)。所以,一般建議將DDL操作放到業(yè)務(wù)低峰期做,其實有兩方面的考慮,1. 避免對系統(tǒng)負載產(chǎn)生較大影響。2. 減少DDL被阻塞的概率。 

MDL引入的背景

MDL是MySQL 5.5.3引入的,主要用于解決兩個問題,

RR事務(wù)隔離級別下不可重復(fù)讀的問題

如下所示,演示環(huán)境,MySQL 5.5.0。

session1> begin;
Query OK, 0 rows affected (0.00 sec)

session1> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | a |
| 2 | b |
+------+------+
rows in set (0.00 sec)

session2> alter table t1 add c1 int;
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0

session1> select * from t1;
Empty set (0.00 sec)

session1> commit;
Query OK, 0 rows affected (0.00 sec)

session1> select * from t1;
+------+------+------+
| id | name | c1 |
+------+------+------+
| 1 | a | NULL |
| 2 | b | NULL |
+------+------+------+
rows in set (0.00 sec)

可以看到,雖然是RR隔離級別,但在開啟事務(wù)的情況下,第二次查詢卻沒有結(jié)果。

主從復(fù)制問題

包括主從數(shù)據(jù)不一致,主從復(fù)制中斷等。

如下面的主從數(shù)據(jù)不一致。

session1> create table t1(id int,name varchar(10)) engine=innodb;
Query OK, 0 rows affected (0.00 sec)

session1> begin;
Query OK, 0 rows affected (0.00 sec)

session1> insert into t1 values(1,'a');
Query OK, 1 row affected (0.00 sec)

session2> truncate table t1;
Query OK, 0 rows affected (0.46 sec)

session1> commit;
Query OK, 0 rows affected (0.35 sec)

session1> select * from t1;
Empty set (0.00 sec)

再來看看從庫的結(jié)果

session1> select * from slowtech.t1;
+------+------+------+
| id | name | c1 |
+------+------+------+
| 1 | a | NULL |
+------+------+------+
row in set (0.00 sec)

看看binlog的內(nèi)容,可以看到,truncate操作記錄在前,insert操作記錄在后。

# at 7140
#180714 19:32:14 server id 1 end_log_pos 7261 Query thread_id=31 exec_time=0 error_code=0
SET TIMESTAMP=1531567934/*!*/;
create table t1(id int,name varchar(10)) engine=innodb
/*!*/;

# at 7261
#180714 19:32:30 server id 1 end_log_pos 7333 Query thread_id=32 exec_time=0 error_code=0
SET TIMESTAMP=1531567950/*!*/;
BEGIN
/*!*/;
# at 7333
#180714 19:32:30 server id 1 end_log_pos 7417 Query thread_id=32 exec_time=0 error_code=0
SET TIMESTAMP=1531567950/*!*/;
truncate table t1
/*!*/;
# at 7417
#180714 19:32:30 server id 1 end_log_pos 7444 Xid = 422
COMMIT/*!*/;

# at 7444
#180714 19:32:34 server id 1 end_log_pos 7516 Query thread_id=31 exec_time=0 error_code=0
SET TIMESTAMP=1531567954/*!*/;
BEGIN
/*!*/;
# at 7516
#180714 19:32:24 server id 1 end_log_pos 7611 Query thread_id=31 exec_time=0 error_code=0
SET TIMESTAMP=1531567944/*!*/;
insert into t1 values(1,'a')
/*!*/;
# at 7611
#180714 19:32:34 server id 1 end_log_pos 7638 Xid = 421
COMMIT/*!*/;

如果會話2執(zhí)行的是drop table操作,還會導(dǎo)致主從中斷。

有意思的是,如果會話2執(zhí)行的是alter table操作,其依舊會被阻塞,阻塞時間受innodb_lock_wait_timeout參數(shù)限制。

mysql> show processlist;
+----+------+-----------+----------+---------+------+-------------------+---------------------------+
| Id | User | Host | db | Command | Time | State  | Info   |
+----+------+-----------+----------+---------+------+-------------------+---------------------------+
| 54 | root | localhost | NULL | Query | 0 | NULL  | show processlist  |
| 58 | root | localhost | slowtech | Sleep | 1062 |   | NULL   |
| 60 | root | localhost | slowtech | Query | 11 | copy to tmp table | alter table t1 add c1 int |
+----+------+-----------+----------+---------+------+-------------------+---------------------------+
rows in set (0.00 sec)

MDL的基本概念

首先,看看官方的說法,

To ensure transaction serializability, the server must not permit one session to perform a data definition language (DDL) statement on a table that is used in an uncompleted explicitly or implicitly started transaction in another session.

The server achieves this by acquiring metadata locks on tables used within a transaction and deferring release of those locks until the transaction ends.

A metadata lock on a table prevents changes to the table's structure.

This locking approach has the implication that a table that is being used by a transaction within one session cannot be used in DDL statements by other sessions until the transaction ends.

從上面的描述可以看到,

1. MDL出現(xiàn)的初衷就是為了保護一個處于事務(wù)中的表的結(jié)構(gòu)不被修改。

2. 這里提到的事務(wù)包括兩類,顯式事務(wù)和AC-NL-RO(auto-commit non-locking read-only)事務(wù)。顯式事務(wù)包括兩類:1. 關(guān)閉AutoCommit下的操作,2. 以begin或start transaction開始的操作。AC-NL-RO可理解為AutoCommit開啟下的select操作。

3. MDL是事務(wù)級別的,只有在事務(wù)結(jié)束后才會釋放。在此之前,其實也有類似的保護機制,只不過是語句級別的。

需要注意的是,MDL不僅僅適用于表,同樣也適用于其它對象,如下表所示,其中,"等待狀態(tài)"對應(yīng)的是"show processlist"中的State。

 

為了提高數(shù)據(jù)庫的并發(fā)度,MDL被細分為了11種類型。

  • MDL_INTENTION_EXCLUSIVE
  • MDL_SHARED
  • MDL_SHARED_HIGH_PRIO
  • MDL_SHARED_READ
  • MDL_SHARED_WRITE
  • MDL_SHARED_WRITE_LOW_PRIO
  • MDL_SHARED_UPGRADABLE
  • MDL_SHARED_READ_ONLY
  • MDL_SHARED_NO_WRITE
  • MDL_SHARED_NO_READ_WRITE
  • MDL_EXCLUSIVE

常用的有MDL_SHARED_READ,MDL_SHARE D_WRITE及MDL_EXCLUSIVE,其分別用于SELECT操作,DML操作及DDL操作。其它類型的對應(yīng)操作可參考源碼sql/mdl.h。

對于MDL_EXCLUSIVE,官方的解釋是,

/*
An exclusive metadata lock.
A connection holding this lock can modify both table's metadata and data.
No other type of metadata lock can be granted while this lock is held.
To be used for CREATE/DROP/RENAME TABLE statements and for execution of
certain phases of other DDL statements.
*/

簡而言之,MDL_EXCLUSIVE是獨占鎖,在其持有期間是不允許其它類型的MDL被授予,自然也包括SELECT和DML操作。

這也就是為什么DDL操作被阻塞時,后續(xù)其它操作也會被阻塞。

關(guān)于MDL的補充

1. MDL的最大等待時間由lock_wait_timeout參數(shù)決定,其默認值為31536000(365天)。在使用工具進行DDL操作時,這個值就不太合理。事實上,pt-online-schema-change和gh-ost對其就進行了相應(yīng)的調(diào)整,其中,前者60s,后者3s。

2. 如果一個SQL語法上有效,但執(zhí)行時報錯,如,列名不存在,其同樣會獲取MDL鎖,直到事務(wù)結(jié)束才釋放。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL出現(xiàn)Waiting for table metadata lock的原因方法
  • MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析
  • MySQL slave 延遲一列 外鍵檢查和自增加鎖
  • 淺談MySQL next-key lock 加鎖范圍
  • MySQL 加鎖控制并發(fā)的方法
  • PHP+MySQL高并發(fā)加鎖事務(wù)處理問題解決方法
  • MYSQL METADATA LOCK(MDL LOCK) 理論及加鎖類型測試

標簽:南陽 三門峽 新余 揚州 贛州 巴中 商丘 貴州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解》,本文關(guān)鍵詞  MySQL,表,結(jié)構(gòu),變更,你,不可,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL表結(jié)構(gòu)變更你不可不知的Metadata Lock詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    91在线免费视频观看| 写真福利精品福利在线观看| 亚洲成av人综合在线观看| av成人综合| 亚洲欧洲精品一区| 国产精品初高中精品久久| 欧美日韩一区二区三区69堂| h视频在线免费观看| 91成人看片| 亚洲高清毛片一区二区| 黄色网址免费在线| heyzo高清国产精品| 日本一级片在线播放| 欧美性巨大欧美| 69亚洲乱人伦| 91视频精品| 日韩电影免费观看中文字幕| 卡一卡2卡三精品| 精品日韩欧美| 热久久99这里有精品| 国产成人精品网| 国产成人在线色| 欧美午夜免费电影| 中文精品99久久国产香蕉| 热国产热中文视频二区| 国产亚洲综合久久| 在线观看免费网站| 国产精品玖玖玖| 国产婷婷色一区二区三区| 九九在线观看视频| 欧美xxxx18国产| 中国一级片在线观看| 黄大色黄女片18第一次| 亚洲精品美女视频| 国产精品久久久久久久久快鸭| sm国产在线调教视频| 久久国产精品高清| 高清乱码免费看污| 开心色怡人综合网站| 香蕉视频在线免费| 欧美日韩免费观看视频| 99蜜月精品久久91| 日本一区二区在线播放| 国产精品久久久久9999吃药| 午夜精品久久久久久久久久久久久蜜桃| 亚洲综合不卡| 久久中文欧美| 国产3p在线播放| 国产99精品视频| 精品视频在线免费看| 天天影视色香欲综合网天天录日日录| 99精品在线直播| www.日本三级| 日韩伦理在线观看| 免费看又黄又无码的网站| 福利网站在线观看| 亚洲国产欧美一区二区丝袜黑人| 国产精品扒开腿做| 国产永久免费观看| 久操视频在线观看免费| 在线观看日韩av先锋影音电影院| 一本大道一区二区三区| 日本高清视频在线观看| 欧美成a人免费观看久久| 欧美一级一区二区| 精品一区二区日本| 日韩久久综合| 精品一区电影国产| 亚洲精品在线观看网站| 亚洲电影在线观看| 青青在线视频免费| 成人免费黄色| 女人扒开屁股爽桶30分钟| 精品国产福利视频| 亚洲精品精品亚洲| 亚洲色图自拍| 免费精品视频一区| 欧美日韩免费观看视频| 欧美视频日韩视频| 男人天堂资源网| 久久精子c满五个校花| 国产免费无码一区二区| 精品中文视频在线| 中文字幕在线网| 婷婷综合一区| 欧美在线视频网| 欧美另类高清视频在线| 国产精品成人播放| 欧美老熟妇喷水| 国产精品第3页| 欧洲精品视频在线| 亚洲欧美一区在线| xxxxxxxxx欧美| 一区二区在线观看免费| 国产精品你懂的在线| av小说在线| 欧美精品电影免费在线观看| 日韩欧美亚洲范冰冰与中字| 亚洲精品视频在线看| 亚洲综合天堂网| 日本综合在线| 日韩精品电影一区二区三区| 国产精品成人免费观看| 国产精品久久久久久久浪潮网站| 国产九色精品成人porny| 9色在线视频| 欧美一级淫片aaaaaaa视频| 黄色av电影网站| 奇米色一区二区三区四区| 免费中文字幕在线| 亚洲女娇小黑人粗硬| 欧美亚洲一区二区三区四区| 一级黄在线观看| 亚洲午夜女主播在线直播| 美女黄网久久| 性色av无码久久一区二区三区| 国产日韩av高清| 国产1区2区在线| 九色porny视频在线观看| 国内外成人免费视频| 永久免费av无码网站性色av| 欧美人与性动交α欧美精品济南到| 特大黑人娇小亚洲女mp4| 欧美熟乱15p| av麻豆国产| 一本久道综合久久精品| 狠狠v欧美ⅴ日韩v亚洲v大胸| 日本电影亚洲天堂一区| 国产精品制服诱惑| 欧美freesex8一10精品| www国产亚洲精品久久网站| 国产成人欧美在线观看| 国产精品美女www爽爽爽| 精品国产伦一区二区三区观看方式| 久久99精品这里精品3| 999久久久91| 特大巨黑人吊性xxx视频| 国产欧美激情视频| 国产在线高清精品| 亚洲人性生活视频| 精品中文字幕视频| 国产麻豆剧果冻传媒观看hd高清| 亚洲黄色网址| 国产亚洲欧美在线精品| 国产1卡2卡三卡四卡网站| 久久青青草原| 激情伊人五月天久久综合| www.久久久久爱免| 久热中文字幕在线精品免费| 日本 欧美 国产| 牛牛视频精品一区二区不卡| 日韩av手机在线| 99re在线视频| 亚洲免费高清视频在线| 精品九九久久| 乱h高h女3p含苞待放| 四虎4545www国产精品| 丁香六月久久综合狠狠色| 日韩av资源在线| 久久av无码精品人妻系列试探| 777亚洲妇女| 国产手机视频一区二区| 久久av最新网址| 青娱乐一区二区| 国产精品99蜜臀久久不卡二区| 波多野结衣毛片| 在线免费av导航| 成人动漫精品一区二区| av免费在线一区二区三区| 国产亚洲成年网址在线观看| 免费看成人av| 亚洲a一区二区| 国产精品wwwwww| 久久国产欧美日韩精品| 91精品国产色综合久久不卡蜜臀| 奇米影视亚洲| 天天做天天摸天天爽天天爱| xxxxxxxxx欧美| 中文字幕佐山爱一区二区免费| 免费人成年激情视频在线观看| 午夜视频在线免费| 天堂…中文在线最新版在线| 成人教育av在线| 日韩极品精品视频免费观看| 一二三不卡视频| 亚洲天堂岛国片| 午夜久久电影网| 亚洲欧洲闷骚av少妇影院| 亚洲免费视频在线观看| 日本怡春院一区二区| 在线一级视频| 最近中文字幕mv免费高清电影| 亚洲精品美女久久| 91蝌蚪在线| 久久精品国产77777蜜臀| 男女全黄做爰文章| 国产精品午夜剧场| 国产精品三级视频| 亚洲乱码日产精品bd在线观看| 亚洲图片 自拍偷拍| 一本一本久久a久久精品牛牛影视| 亚洲免费av一区二区三区| 成在线人视频免费视频| 国产精品99久久不卡二区| 国产原创av在线| 国产视频精品va久久久久久| 在线一区二区三区| 亚洲精品在线免费| 少妇精品久久久一区二区| 性感av在线播放| 精品人妻无码一区二区色欲产成人| 99精品久久久久| 无码黑人精品一区二区| 亚洲在线第一页| 日本高清在线观看视频| 久久精品亚洲a| 在线黄色免费网站| canopen超线视频网线的应用| 欧美福利视频在线观看| 成人在线免费观看av| 国产精品久久久免费视频| 欧美日韩亚洲一二三| 亚洲伦理在线| 在线免费国产视频| 九九久久久久99精品| 国产成人在线免费观看视频| 日本a一级在线免费播放| 欧美性一级生活| 欧美高清视频一区二区| 亚洲一区免费观看| 99精品欧美一区二区蜜桃免费| 神马午夜久久| 一级国产黄色片| 亚洲小说区图片区情欲小说| 中文字幕一区二区人妻痴汉电车| 97久精品国产片一区二区三区| 日b视频免费观看| 一区二区不卡久久精品| 91精品久久香蕉国产线看观看| 国产综合中文字幕| 日韩精品中文字幕在线不卡尤物| 欧美女王vk| 国产午夜亚洲精品午夜鲁丝片| 伊人色综合久久天天五月婷| 少妇一级淫片免费放中国| 色黄视频在线观看| 国产女主播喷水视频在线观看| 中文字幕中文在线不卡住| 成人午夜视频在线观看| 欧美视频在线观看免费网址| 成人免费高清视频| 欧美自拍视频在线| 91色在线视频| 日韩中文字幕区一区有砖一区| 美美哒免费高清在线观看视频一区二区| 在线观看欧美精品| 又粗又黑又大的吊av| 在线观看欧美一区| 99亚洲伊人久久精品影院| 成人网18免费看| 狂野欧美性猛交| 久久天天躁狠狠躁夜夜av| 久久中文字幕av| 欧美 日韩 国产 激情| 五月天激情播播| 久久黄色免费看| 亚洲一区二区三区av无码| 欧美在线性爱视频| 91精品国产91久久久久| 在线精品一区二区三区| 亚洲一级免费在线观看| 免费在线观看成人av| 黄a免费视频| 日韩经典中文字幕在线观看| 白丝校花扒腿让我c| 国产精品视频3p| 黄色aaa级片| 亚洲精品在线视频免费观看| 亚洲偷熟乱区亚洲香蕉av| 日韩色级片先锋影音| 欧美成人高清视频| 一级视频在线免费观看| 超碰av女优在线| 男人和女人啪啪网站| 456亚洲精品成人影院| 97av视频在线观看| 一区二区三区在线视频免费| 欧美天天综合| 久久全国免费视频| 羞羞视频网站| 国产99久久久国产精品潘金网站| 亚洲乱码精品久久久久..| 亚洲最大免费视频| 日本在线视频www鲁啊鲁| 亚洲国内高清视频| 国内在线观看一区二区三区| 精品一区二区在线观看视频| 免费观看羞羞视频网站| 亚洲精品乱码久久久久久久久| 亚洲综合欧美激情| 日产欧产va高清| 91精品免费看| 欧美a在线看| 国产porn视频| 色老板免费视频| av色资源站| 五月天久久比比资源色| 无码任你躁久久久久久久| 成人免费观看视频| 三级一区在线视频先锋| 久久青青草综合| 国产精品手机视频| 精品一区二区三区四区五区| 另类专区欧美| 蜜桃视频一区二区在线观看| 日韩视频免费直播| 中国动漫在线观看完整版免费| 亚洲国产日韩欧美综合久久| 色综合欧美在线视频区| 国产高清av| 正义之心1992免费观看全集完整版| 特级做a爱片免费69| 九色porny视频在线观看| 日韩在线视频免费播放| 久久久久一区二区三区| 久久老司机精品视频| 性欧美孕妇孕交| 精品国产av 无码一区二区三区|