mysql Waiting for table metadata lock

當我們在進行表的更新操作或者是想要drop table的操作的時候,有時候,會卡死,這樣的原因在於事務還未提交或者未回滾。但是此時有其他的用戶在執行表的ddl語句。

(更新表的字段或者刪除掉表)然後,由於表的ddl語句會佔用metadata的獨佔鎖。會導致之後的所有sql都無法執行。


這個時候,我們可以輸入命令   show processlist 查看到所有跟MySQL操作相關的進程。

我們可以看到waiting for table metadata lock 狀態的進程。我們可以將這些進程殺死掉。


我們有時候,在show processlist結果中看不到任何有關於目標表的操作。

這個時候,我們可以看一看 information_schema.innodb_trx這張表 

select * from information_schema.innodb_trx;


在事務還沒有完成之前,目標表的鎖是不會被釋放的。


我們可以通過  查看information_schema.innodb_trx表中尋找事務的id,然後kill掉,就可以正常的進行表的ddl語句了。


上述是事務未提交的時候,

當事務開啓了,但是事務裏的sql語句又出錯了。

這時,失敗的語句獲取到的鎖依舊是有效的。所以還是不能對錶進行ddl操作。

performance_schema.events_statements_current 

這時,可以從上面的表進行查詢執行失敗的事務的id,然後kill掉


參考網址: http://www.cnblogs.com/digdeep/p/4892953.html

發佈了241 篇原創文章 · 獲贊 71 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章