1. 程式人生 > 其它 >mysql 鎖死 lock wait timeout exceed

mysql 鎖死 lock wait timeout exceed

show processlist;

我們可以通過到information_schema 中來進行查詢被鎖的語句。

解釋:information_schema這張資料表儲存了MySQL伺服器所有資料庫的資訊。如資料庫名,資料庫的表,表欄的資料型別與訪問許可權等。再簡單點,這臺MySQL伺服器上,到底有哪些資料庫、各個資料庫有哪些表,每張表的欄位型別是什麼,各個資料庫要什麼許可權才能訪問,等等資訊都儲存在information_schema表裡面。

我們可以用下面三張表來查原因:

  • innodb_trx 當前執行的所有事務  desc information_schema.innodb_trx;
  • innodb_locks 當前出現的鎖  desc information_schema.innodb_locks;
  • innodb_lock_waits 鎖等待的對應關係  desc information_schema.innodb_lock_waits;

如果資料庫中有鎖的話,我們可以使用這條語句來檢視:

select * from information_schema.innodb_trx

圖中紅色語句 LOCK WAIT為佔用系統資源的語句,我們需要殺掉這個鎖,執行 kill 執行緒id號。上面這條記錄的id為199120823069, trx_mysql_thread_id 為 XXX, 所以我們執行:kill

XXX殺掉這個MySQL語句的執行緒即可。

執行之後:

kill XXX

// 查詢執行緒
// SELECT * from information_schema.processlist WHERE id = 738178711;
// show full processlist;

其他的記錄不需要關注,因為其他的記錄狀態為“RUNNING” 即正在執行的事務,並沒有鎖。

或者kill 這個表中的所有