做爰高潮a片〈毛片〉,尤物av天堂一区二区在线观看,一本久久A久久精品VR综合,添女人荫蒂全部过程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
主站蜘蛛池模板: 剑川县| 宽城| 聂荣县| 彭泽县| 东辽县| 黑水县| 桦川县| 库车县| 汕尾市| 保山市| 奈曼旗| 红原县| 洛川县| 客服| 乐平市| 大方县| 新宾| 白水县| 永靖县| 客服| 永平县| 阳东县| 繁昌县| 交城县| 敦化市| 五河县| 津南区| 阿坝| 正蓝旗| 藁城市| 文昌市| 荥阳市| 浮梁县| 台南县| 新源县| 文山县| 巫溪县| 吴川市| 罗田县| 大余县| 绥化市|