mysql 鎖死 lock wait timeout exceed
阿新 • • 發佈:2022-03-15
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
執行之後:
kill XXX
// 查詢執行緒
// SELECT * from information_schema.processlist WHERE id = 738178711;
// show full processlist;
其他的記錄不需要關注,因為其他的記錄狀態為“RUNNING
” 即正在執行的事務,並沒有鎖。
或者kill 這個表中的所有