好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > MySQL出現Waiting for table metadata lock的原因方法

MySQL出現Waiting for table metadata lock的原因方法

熱門標簽:400電話申請廠家現貨 百度地圖標注要什么軟件 自己做地圖標注需要些什么 徐涇鎮騰訊地圖標注 天津公司外呼系統軟件 中國地圖標注公司 電話機器人的價格多少錢一個月 福建外呼電銷機器人加盟 昌德訊外呼系統

MySQL在進行alter table等DDL操作時,有時會出現Waiting for table metadata lock的等待場景。而且,一旦alter table TableA的操作停滯在Waiting for table metadata lock的狀態,后續對TableA的任何操作(包括讀)都無法進行,因為他們也會在Opening tables的階段進入到Waiting for table metadata lock的鎖等待隊列。如果是產品環境的核心表出現了這樣的鎖等待隊列,就會造成災難性的后果。

造成alter table產生Waiting for table metadata lock的原因其實很簡單,一般是以下幾個簡單的場景:

場景一:長事物運行,阻塞DDL,繼而阻塞所有同表的后續操作

通過show processlist可以看到TableA上有正在進行的操作(包括讀),此時alter table語句無法獲取到metadata 獨占鎖,會進行等待。

這是最基本的一種情形,這個和mysql 5.6中的online ddl并不沖突。一般alter table的操作過程中(見下圖),在after create步驟會獲取metadata 獨占鎖,當進行到altering table的過程時(通常是最花時間的步驟),對該表的讀寫都可以正常進行,這就是online ddl的表現,并不會像之前在整個alter table過程中阻塞寫入。(當然,也并不是所有類型的alter操作都能online的,具體可以參見官方手冊:http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html)
處理方法: kill 掉 DDL所在的session.

場景二:未提交事物,阻塞DDL,繼而阻塞所有同表的后續操作

通過show processlist看不到TableA上有任何操作,但實際上存在有未提交的事務,可以在 information_schema.innodb_trx中查看到。在事務沒有完成之前,TableA上的鎖不會釋放,alter table同樣獲取不到metadata的獨占鎖。

處理方法:通過 select * from information_schema.innodb_trx\G, 找到未提交事物的sid, 然后 kill 掉,讓其回滾。

場景三:

通過show processlist看不到TableA上有任何操作,在information_schema.innodb_trx中也沒有任何進行中的事務。這很可能是因為在一個顯式的事務中,對TableA進行了一個失敗的操作(比如查詢了一個不存在的字段),這時事務沒有開始,但是失敗語句獲取到的鎖依然有效,沒有釋放。從performance_schema.events_statements_current表中可以查到失敗的語句。

官方手冊上對此的說明如下:

If the server acquires metadata locks for a statement that is syntactically valid but fails during execution, it does not release the locks early. Lock release is still deferred to the end of the transaction because the failed statement is written to the binary log and the locks protect log consistency.

也就是說除了語法錯誤,其他錯誤語句獲取到的鎖在這個事務提交或回滾之前,仍然不會釋放掉。because the failed statement is written to the binary log and the locks protect log consistency 但是解釋這一行為的原因很難理解,因為錯誤的語句根本不會被記錄到二進制日志。

處理方法:通過performance_schema.events_statements_current找到其sid, kill 掉該session. 也可以 kill 掉DDL所在的session.

總之,alter table的語句是很危險的(其實他的危險其實是未提交事物或者長事務導致的),在操作之前最好確認對要操作的表沒有任何進行中的操作、沒有未提交事務、也沒有顯式事務中的報錯語句。如果有alter table的維護任務,在無人監管的時候運行,最好通過lock_wait_timeout設置好超時時間,避免長時間的metedata鎖等待。

您可能感興趣的文章:
  • MySQL表結構變更你不可不知的Metadata Lock詳解
  • MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析
  • MySQL slave 延遲一列 外鍵檢查和自增加鎖
  • 淺談MySQL next-key lock 加鎖范圍
  • MySQL 加鎖控制并發的方法
  • PHP+MySQL高并發加鎖事務處理問題解決方法
  • MYSQL METADATA LOCK(MDL LOCK) 理論及加鎖類型測試

標簽:駐馬店 鄂爾多斯 昌都 陜西 黔西 荊門 梅河口 北京

巨人網絡通訊聲明:本文標題《MySQL出現Waiting for table metadata lock的原因方法》,本文關鍵詞  MySQL,出現,Waiting,for,table,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL出現Waiting for table metadata lock的原因方法》相關的同類信息!
  • 本頁收集關于MySQL出現Waiting for table metadata lock的原因方法的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 亚洲色视频在线播放网站| 国产??在线观看免费| 韩国嫩模sua人体高清| 丝袜丽奴| 91激情在线| 又大又硬又长又粗免费观看| 高h古代bl嗯…啊| 最近中文字幕2019高清视频| 美女被艹漫画| 丝袜老师让我?了一夜刺激| 亚洲优优色影影院| 欧美影院在线| 一本色道老熟妇久久八八综合| 国产粉嫩爆乳主播大秀在线| 香蕉视频91| 被滋润的娇妻疯狂呻吟| 亚洲欧美秘?无码一区二区蜜桃| 我和岳疯狂性做爰全过| 国产无精乱码一区二区三区| 久久女人网| 韩国高清不卡一区二区| 97午夜理伦影院在线观看| 可以免费看黄的网站| 联盟在ig我说了算| 正在播放国产精品国语对白| 美女逼图片| 精品久久久无码中文字幕vr| 哦┅┅快┅┅用力啊┅少妇奶水| 男人肌肌插女人肌肌| 妈妈的朋友4在哪可以去看中字安| 久久精品国产亚洲网站| 日本—中文字幕A级毛片| 国产?麻豆?女教师张津瑜| 欧美无毛逼| 免费看男人添女人下面视频 | 亚洲女人逼| 性欧美高清极品猛交| ????桶烂??30分钟真人| 啊~嗯短裙直接进去h师生| poren300黑色丝袜中国| 啦啦啦直播视频在线看免费|