亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

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

2024-07-25 19:08:46
字體:
供稿:網(wǎng)友

前言

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

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

一旦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è)務。所以,一般建議將DDL操作放到業(yè)務低峰期做,其實有兩方面的考慮,1. 避免對系統(tǒng)負載產(chǎn)生較大影響。2. 減少DDL被阻塞的概率。 

MDL引入的背景

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

RR事務隔離級別下不可重復讀的問題

如下所示,演示環(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: 0session1> 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隔離級別,但在開啟事務的情況下,第二次查詢卻沒有結(jié)果。

主從復制問題

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

如下面的主從數(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=0SET 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=0SET 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=0SET TIMESTAMP=1531567950/*!*/;truncate table t1/*!*/;# at 7417#180714 19:32:30 server id 1 end_log_pos 7444 Xid = 422COMMIT/*!*/;# at 7444#180714 19:32:34 server id 1 end_log_pos 7516 Query thread_id=31 exec_time=0 error_code=0SET 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=0SET TIMESTAMP=1531567944/*!*/;insert into t1 values(1,'a')/*!*/;# at 7611#180714 19:32:34 server id 1 end_log_pos 7638 Xid = 421COMMIT/*!*/;

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

有意思的是,如果會話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)的初衷就是為了保護一個處于事務中的表的結(jié)構(gòu)不被修改。

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

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

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

MySQL,表結(jié)構(gòu),Metadata,Lock

為了提高數(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操作。其它類型的對應操作可參考源碼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對其就進行了相應的調(diào)整,其中,前者60s,后者3s。

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

總結(jié)

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


注:相關(guān)教程知識閱讀請移步到MYSQL教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
欧美精品久久一区二区三区| 日韩在线一区二区三区免费视频| 国产蜜臀在线| 亚洲国产精品一区二区第四页av| 欧美性大战久久| 成年人在线看| 美女被到爽高潮视频| 无遮挡aaaaa大片免费看| www.国产一区二区| 日韩欧美综合一区| 久操视频在线观看免费| 香蕉久久精品日日躁夜夜躁| 精品无码国产一区二区三区av| 欧美性bbwbbwbbwhd| 色呦哟—国产精品| 色久欧美在线视频观看| 国产精品久久久av久久久| 热99re久久精品这里都是免费| 亚洲欧美精品中文第三| 天天色天天操天天| 久久综合狠狠综合| 91av在线视频观看| 免费在线欧美视频| 国内精品视频一区二区三区八戒| 91香蕉视频黄| 在线免费观看成人网| 精品久久久久一区二区三区| 国产一区二区色| 久久电影一区| 欧美一级片在线看| 中文字幕在线不卡国产视频| sihu影院永久在线影院| 一区二区三区四区在线播放| 你懂的网址国产 欧美| 久久99精品国产自在现线小黄鸭| 中文字幕视频一区二区| 国产精品一区在线看| 精品72久久久久中文字幕| 夜夜春成人影院| 六月婷婷一区| 在线观看亚洲网站| av在线首页| 亚洲欧美在线免费| 日韩美一区二区| 偷窥自拍亚洲色图精选| 中文字幕乱码在线观看| 亚洲成人天堂| 日本一区二区三区四区五区六区| 日韩精品福利视频| 精品国产乱码久久久久久丨区2区| 激情影院在线| 视频一区视频二区欧美| 久久九九热免费视频| 亚洲一区二区三区在线看| 久久久久久99久久久精品网站| 影音先锋在线视频| 欧美一级片一区| 免费欧美视频| 亚洲精品一区二区三区蜜桃久| 亚洲精品亚洲人成在线观看| 草草草在线视频| 久久久久久综合网天天| 四虎电影网址| 一区二区三区国产在线| 欧美视频福利| 欧美1234区| 国产精品久久久久影视| 成人午夜激情av| 日本中文字幕高清| 亚洲 日韩 国产第一区| 日韩精品一区二区三区色偷偷| 大桥未久在线视频| 三级短视频在线| 欧美主播一区二区三区| 福利小视频在线观看| 精品国产午夜福利在线观看| 捆绑紧缚一区二区三区视频| 狠狠插狠狠操| 九色91av视频| 国产蜜臀97一区二区三区| 国产精品久久婷婷| 国产精品v欧美精品∨日韩| 国产aⅴ精品一区二区三区色成熟| 五月综合激情| 日韩中文在线视频| 在线播放精品视频| 黄色免费在线网站| 精品久久精品| 亚洲欧洲国产精品久久| 亚洲一区精品在线观看| mm1313亚洲国产精品无码试看| www.亚洲视频| 26uuu久久噜噜噜噜| 欧美亚洲精品一区| 成人av网址在线| 久久久久久亚洲综合影院红桃| 国产高清在线观看| 国产极品美女到高潮| 91丨九色丨黑人外教| 大陆一级毛片| 色综合咪咪久久| 亚洲精品国产一区二区三区四区在线| 欧美亚洲爱爱另类综合| 一区二区三区韩国| 日韩av片免费在线观看| 成人免费视频app| 手机在线精品视频| 成人区人妻精品一区二| 午夜免费看视频| 香蕉视频免费版| 国产乱码精品一区二区三区日韩精品| 国模精品视频一区二区三区| 亚洲最新在线观看| 成人在线观看一区二区| 俄罗斯黄色一级片| 黄色动漫免费看| 日本精品视频网站| 天堂va久久久噜噜噜久久va| 精品乱码一区二区三四区视频| 在线看国产精品| 3d成人动漫网站| 黄色av地址| 91麻豆精品国产91久久久| 日韩成人黄色片| 免费看美女隐私的视频| 亚洲理论中文字幕| 精品视频999| 日韩在线精品强乱中文字幕| 欧美一级大胆视频| 91麻豆精品久久久久蜜臀| 国产高清大尺度一区二区不卡| 91看片淫黄大片一级在线观看| 久久先锋影音av鲁色资源| 亚洲色图图片区| 国产区卡一卡二卡三乱码免费| 免费不卡在线观看| 992tv在线影院| 中文字幕日韩一区二区| 色久优优欧美色久优优| 91视频免费入口| 欧美激情第六页| 在线高清av| 国产成人手机高清在线观看网站| 免费看又色又爽又黄网站| 深夜福利亚洲| 国产精品久久久爽爽爽麻豆色哟哟| 色啦啦av综合| 搜成人激情视频| 91精品国产自产观看在线| 色播久久人人爽人人爽人人片视av| 亚洲wwww| 秋霞午夜剧场| 大香一本蕉伊线亚洲网| 狠狠入ady亚洲精品| 日韩av在线免播放器| 综合免费一区二区三区| 黄色大片网站在线观看| 美女少妇精品视频| 奇米4444一区二区三区| 欧美性另类69xxxx| 日韩美女免费线视频| 国严精品久久久久久亚洲影视| 亚洲第一综合| 久久亚洲国产成人精品无码区| 久久国产视频网站| 成人高清一区| 美日韩一区二区| 欧美做爰爽爽爽爽爽爽| 亚洲网友自拍偷拍| 国产午夜亚洲精品一级在线| 国产99久久久久久免费看农村| 久久精品高清| 日韩伦理一区二区三区av在线| 欧美精品国产精品久久久| 亚洲免费成人av在线| 国产精品久久久久毛片| 青春草视频在线| 欧美大片免费| 免费网站看电影大片| 免费观看国产视频在线| 久久久久免费看| 成人av一区二区三区| 五月婷婷综合在线| 色综合久久久无码中文字幕波多| 国产精品资源在线| 一个色在线综合| 欧美日韩一区二区免费视频| 热久久免费国产视频| 国产精品爱久久久久久久| 性生活三级视频| 中文字幕免费在线视频| 亚洲欧美另类小说视频| 99re在线播放| 国产一区玩具在线观看| 日韩一区精品| 欧洲亚洲精品| 日本不卡免费在线视频| 欧美极品jizzhd欧美| 日韩母乳在线| 国产成人精品亚洲精品色欲| 五月天av在线播放| 欧美+亚洲+精品+三区| 狠狠色噜噜狠狠| 精品久久久久人成| 国产精品久久久久久久久久ktv| 污污的视频免费观看| 欧美精品一区二区三区国产精品| 91视频福利网| 麻豆91在线观看| h片在线播放| 国产精品成人一区二区三区吃奶| 欧美videos极品另类| h在线视频免费观看完整版| 影音先锋日韩有码| 亚洲欧美制服综合另类| 青青草在线播放| 亚洲二区视频在线| 一区二区三区在线视频看| 蜜臀久久99精品久久久久久宅男| 亚洲国产高清在线| 亚洲资源网你懂的| 在线天堂中文www视软件| 精品一区二区三区久久| 精品剧情v国产在线观看| 国产小视频在线看| 免费看污久久久| 先锋影音在线资源站91| 欧美三级韩国三级日本一级| av女名字大全列表| 久久精品一本久久99精品| 激情欧美日韩| 麻豆91精品91久久久| 51xx午夜影福利| 粉嫩在线一区二区三区视频| 久久久全国免费视频| 亚洲人在线观看视频| 无遮挡aaaaa大片免费看| 亚洲最大av| 免费无码国产v片在线观看| 亚洲香蕉久久| 一区视频免费观看| 精品亚洲va在线va天堂资源站| 成人一级生活片| 久久精品女同亚洲女同13| 日本夜夜草视频网站| 日韩美一区二区| 色噜噜狠狠成人中文综合| 亚欧洲精品视频| 欧美另类一区二区三区| 色婷婷香蕉在线一区二区| 精品国精品国产自在久不卡| 日韩欧美一区二区三区视频| www.成人在线视频| 韩国理伦片一区二区三区在线播放| 五月天开心婷婷| 日本爱爱网站| 亚洲激情另类| 日韩二区在线观看| av一区二区不卡| 性生交大片免费看l| 亚洲一区在线直播| 亚洲精品自拍第一页| 岛国av免费在线| 久久免费视频3| 亚欧在线免费观看| 国产三级三级看三级| ww久久中文字幕| 亚洲小视频在线| 亚洲人成网www| 六十路在线观看| 亚洲伊人网站| 国产女同在线观看| 国内外激情在线| 二区三区中文字幕| 日韩美女中文字幕| 欧美日韩国产在线播放| 日本中文字幕久久看| 国内精品久久久久久久影视蜜臀| 成人一区二区| 欧美一区二区三区四区视频| 蜜桃传媒av| 欧美一区二区三区爽大粗免费| 亚洲精品v天堂中文字幕| av超碰在线| 欧美大秀在线观看| 国产中文字幕二区| 欧美aⅴ在线观看| 欧美吻胸吃奶大尺度电影| 超碰在线网站| 日韩高清影视在线观看| 忘忧草在线www成人影院| 亚洲精品天堂在线观看| 午夜精品福利影院| av首页在线观看| 欧美激情一区二区三区蜜桃视频| 夜夜嗨网站十八久久| 国产精品久久久久7777婷婷| 精品国产一区二区三区久久狼黑人| 制服师生第一页| 中国女人内谢69xxxx视频| 狠狠色狠狠色综合日日小说| 国内精品视频一区| 亚洲精品视频在线观看免费| 亚欧黄色av| 色婷婷久久99综合精品jk白丝| 欧美国产精品一区二区| 在线观看免费视频黄| 欧美激情第3页| 亚洲国产精品久久91精品| 天天插天天操天天干| 亚洲天堂资源| 男人插女人下面免费视频| 天堂成人在线视频| 亚洲美女区一区| 国产日本欧美一区二区三区| 久久av偷拍| 国产精品久久久久久久久免费桃花| 久久国产波多野结衣| 国产精品ⅴa有声小说| 国产伦精品一区二区三区免费| 国产91精品最新在线播放| 国产欧美中文字幕| 欧妇女乱妇女乱视频| 欧美成人精品午夜一区二区| 国产精品成人在线观看| 精品一区二区三区日本| 欧美在线观看日本一区| 欧美高清你懂的|