MySQL 數據庫死鎖排查

死鎖排查方法

  • 查看進程狀態
show processlist;
  • 查看行鎖的狀態
show status like 'InnoDB_row_lock%';
  • 查詢是否有死鎖
show engine innodb status;
  • 查看正在鎖的事務

    檢查字段 trx_autocommit_non_locking,如果爲 0,則說明這個事務還沒有提交,需要提交。
    殺掉這個事務。因爲很可能是人工修改數據庫,沒有提交。
    這個時候,從小到大 kill <trx_mysql_thread_id>
    檢查字段 trx_autocommit_non_locking,如果爲 1,則說明死鎖發生。
    根據字段 trx_mysql_thread_id, 從大到小執行 kill <trx_mysql_thread_id> (保存先提交的數據)
    每殺掉一個,跑一下語句,看看情況。

SELECT *
FROM
INFORMATION_SCHEMA.innodb_trx;
  • 查看正在鎖的事務
SELECT *
FROM
INFORMATION_SCHEMA.INNODB_LOCKS;
  • 查看等待鎖的事務
SELECT *
FROM
INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
  • 查看正在使用的表
show OPEN TABLES
where
In_use > 0;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章