国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

mysqlmetadatalock_MySQL

來源:懂視網 責編:小采 時間:2020-11-09 20:02:00
文檔

mysqlmetadatalock_MySQL

mysqlmetadatalock_MySQL:想必玩過mysql的人對Waiting for table metadata lock肯定不會陌生,一般都是進行alter操作時被堵住了,導致了我們在show processlist 時,看到線程的狀態是在等metadata lock。本文會對mysql 的metadata lock做一個小小的總結,希望對大
推薦度:
導讀mysqlmetadatalock_MySQL:想必玩過mysql的人對Waiting for table metadata lock肯定不會陌生,一般都是進行alter操作時被堵住了,導致了我們在show processlist 時,看到線程的狀態是在等metadata lock。本文會對mysql 的metadata lock做一個小小的總結,希望對大

想必玩過mysql的人對Waiting for table metadata lock肯定不會陌生,一般都是進行alter操作時被堵住了,導致了我們在show processlist 時,看到線程的狀態是在等metadata lock。本文會對mysql 的metadata lock做一個小小的總結,希望對大家有所幫助。

MDL是在5.5才引入到mysql,之前也有類似保護元數據的機制,只是沒有明確提出MDL概念而已。但是5.5之前版本(比如5.1)與5.5之后版本在保護元數據這塊有一個顯著的不同點是,5.1對于元數據的保護是語句級別的,5.5對于metadata的保護是事務級別的。所謂語句級別,即語句執行完成后,無論事務是否提交或回滾,其表結構可以被其他會話更新;而事務級別則是在事務結束后才釋放MDL。

引入MDL后,主要解決了2個問題,一個是事務隔離問題,比如在可重復隔離級別下,會話A在2次查詢期間,會話B對表結構做了修改,兩次查詢結果就會不一致,無法滿足可重復讀的要求;另外一個是數據復制的問題,比如會話A執行了多條更新語句期間,另外一個會話B做了表結構變更并且先提交,就會導致slave在重做時,先重做alter,再重做update時就會出現復制錯誤的現象。

5.5以后,什么情況下會碰到MDL鎖,我結合實際情況舉3個會出現MDL的場景,來分析MDL加鎖時機。下文的.測試都是以mysql 5.5這個版本為基準,沒有考慮到online ddl,下一篇博文會詳細介紹5.6的online ddl。

1.大查詢或mysqldump導致alter等待MDL

時間點

會話A

會話B

會話C

1

Select count(*) from t;

2

alter table t add column c3 int;阻塞

3

Show processlist;

B:Waiting for table metadata lock

4

A:執行完畢

5

Show processlist;

B:copy to tmp table

6

B:繼續執行

7

Select count(*) from t;

8

Show processlist;

A: Sending data

B: copy to tmp table

9

A:執行完畢

表1

從表1可以看到,會話A先執行select ,B后執行alter,在會話A執行完畢前,會話B拿不到MDL鎖。A會話在時間點4執行完畢后,會話B拿到MDL鎖,變為copy to tmp table狀態,時間點7,A會話再次執行查詢,此時A和B都正常執行,這說明對于MDL鎖而言,select會阻塞alter,而alter不會阻塞select。

2.表上存在未提交的事務,導致alter等待MDL

時間點

會話A

會話B

會話C

1

set autocommit=0;

update t set c2='9999' where c1=4;

2

alter table t drop column c3;

3

Show processlist;

B:Waiting for table metadata lock

4

A:提交事務

commit

5

Show processlist;

B:copy to tmp table

6

B:繼續執行

7

update t set c2='9999' where c1=4;阻塞

8

Show processlist;

A: Waiting for table metadata lock

B: copy to tmp table

9

B執行完畢

10

A執行完畢

表2

從表2可以看到,會話A第一次執行update語句后,未提交,導致后面會話B執行alter語句時需要等待MDL鎖;時間點4,A會話提交事務,此時會話B獲取MDL鎖,開始執行;時間點7,A會話再次發起update操作,此時A會話被阻塞住,這說明對于MDL鎖而言,update會阻塞alter,同樣alter也會阻塞update。

PS:時間點3由于通過show processlist只看到alter被阻塞了,但不清楚被誰阻塞,可以通過查看information_schema.innodb_trx可以找到活動的事務。

3.這種情況是第1種情況的特例,存在一個查詢失敗的語句,比如查詢不存在的列,語句失敗返回,但是事務沒有提交,此時alter仍然會被堵住。

時間點

會話A

會話B

會話C

1

Start transaction;

Select c99 from t;

Unknown column 'c99' in 'field list'

2

alter table t drop column c3;

3

Show processlist;

B:copy to tmp table

4

Show processlist;

B:Waiting for table metadata lock

5

A:提交事務

commit

6

執行完畢

表3

這里注意時間1,會話A要顯示開啟一個事務,否則查詢會隱式回滾結束,無法重現上面的場景。會話B執行alter后,沒有立即阻塞住,而是立馬開始copy to tmp table,這個過程結束后,才進行了MDL鎖等待。這怎么解釋呢,應該是執行alter操作主要分為創建臨時新表->插入老表的數據->臨時新表rename to老表三個步驟,在這種情況下,到最后一步才需要MDL鎖,所以copy過程中不會阻塞。由于沒有查詢在進行,而且查詢也沒有進入innodb層 (失敗返回),所以show processlist和information_schema.innodb_trx沒有可以參考的信息。

這里有一個小疑點,對于第一種和第二種情況,alter在開始時就立馬堵住了,第三種情況是copy結束后,才堵住。我猜測alter內部會根據實際情況,確定什么時候上MDL鎖,有興趣的同學可以去debug源碼看看究竟。

參考:

http://www.mysqlperformanceblog.com/2013/02/01/implications-of-metadata-locking-changes-in-mysql-5-5/

http://ctripmysqldba.iteye.com/blog/1938150

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

mysqlmetadatalock_MySQL

mysqlmetadatalock_MySQL:想必玩過mysql的人對Waiting for table metadata lock肯定不會陌生,一般都是進行alter操作時被堵住了,導致了我們在show processlist 時,看到線程的狀態是在等metadata lock。本文會對mysql 的metadata lock做一個小小的總結,希望對大
推薦度:
標簽: mysql lock metadata
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产三级直播 | 久久久久久久国产高清 | 国产精品美女一区二区三区 | 国产成人调教视频在线观看 | 国产亚洲午夜精品a一区二区 | 免费黄色网址在线观看 | 久久99网站 | 精品在线观看免费 | 国产欧美综合精品一区二区 | 婷婷伊人 | 日韩成人在线观看 | 亚洲视频播放 | 国产国语一级毛片中文 | 国产中文在线 | 爱啪网亚洲第一福利网站 | 性插欧美 | 国产亚洲欧美精品久久久 | 久久国产精品最新一区 | 国产精品九九久久精品女同 | 91福利国产在线观一区二区 | 久久精品国产一区二区三区日韩 | 成人免费久久精品国产片久久影院 | 国产在线精品一区二区三区不卡 | 老色99久久九九精品尤物 | 国产一区二区三区久久精品 | 国产一级插插插 | 欧美自拍亚洲 | 欧美国产高清欧美 | 亚洲一区自拍 | 国产中文久久精品 | 久久久国产这里有的是精品 | 日韩欧美一区二区三区在线播放 | 中日韩在线 | 久久激情网 | 精品久久久久久久久中文字幕 | 亚洲免费网站观看视频 | 国产一区二区福利久久 | 精品伊人久久大线蕉色首页 | 劲爆欧美色欧美 | 欧美日韩国产在线 | 精品国产综合区久久久久99 |