mysql鎖表及事務鎖處理
阿新 • • 發佈:2019-01-06
首先使用命令檢視鎖的操作
mysql>show processlist
找到有lock的記錄,用 kill #id將對應lock的操作的記錄刪除,一般這樣就可以將鎖問題解決。
可是在生產環境中遇到一個問題,就是按上面的方法把鎖都刪了,程式可以正常跑了,可是在給一個表新增欄位時,表又鎖了,其他查詢都無法進行下去,可是,只是給表加欄位為什麼會出現鎖死的情況。查了下,用下面的命令查到有事務一直在執行:
檢視正在鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
檢視等待鎖的事務
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
.查詢當前活躍事務
SELECT * from information_schema.INNODB_TRX
根據trx_started等判斷事務是否異常鎖定
和上面方法一樣,再講鎖的事務操作:kill #tid將事務關了就可以正常操作表了。
information_shcema下的三張表(通過這三張表可以更新監控當前事物並且分析存在的鎖問題)
—— innodb_trx ( 列印innodb核心中的當前活躍(ACTIVE)事務)
—— innodb_locks ( 列印當前狀態產生的innodb鎖 僅在有鎖等待時列印)
—— innodb_lock_waits (列印當前狀態產生的innodb鎖等待 僅在有鎖等待時列印)