MySQL metadata lock阻塞問題
- 2019 年 10 月 4 日
- 筆記
2017年4月1日星期六
在某個業務的主庫加完2個欄位後,業務方回饋在30分鐘後從庫也一直無法查看到這個新欄位。
在slave上執行show slave statusG 如下圖

show porcesslist; 如下圖:

上圖2張圖,可以看到延遲較大,從庫上的alter操作一直在等待metadata lock,處於阻塞狀態。
解決方法:
使用SELECT * FROM information_schema.innodb_trxG找到那個事務未提交導致的問題:

kill2359; 殺掉這個執行緒即可。
殺完這個執行緒後,show slave statusG主從延遲立馬降了下來,show processlist也沒有持鎖的狀態了。【show slave statusG即便是持鎖,也就是短時間的system lock】

如果我們使用了zabbix的percona監控的話,可以調整下相關觸發器的閾值,如下圖:

模板上默認是100。一般只有alter table 或者select .. for update 這類的操作才會造成LOCK,因此正常業務情況下lock thread超過50就需要關注下情況了。