1. 程式人生 > >mysql鎖表及事務鎖處理

mysql鎖表及事務鎖處理

首先使用命令檢視鎖的操作

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鎖等待 僅在有鎖等待時列印)