MySQL事務鎖問題-Lock wait timeout exceeded

問題現象:

  接口響應時間超長,耗時幾十秒才返回錯誤提示,後臺日誌中出現Lock wait timeout exceeded; try restarting transaction的錯誤mysql

問題場景:

  一、在同一事務內前後對同一條數據進行插入和更新操做;
  二、多臺服務器操做同一數據庫;
  三、瞬時出現高並發現象;sql

問題緣由:

  一、在高併發的狀況下,Spring事物形成數據庫死鎖,後續操做超時拋出異常。
  二、Mysql數據庫採用InnoDB模式,默認參數:innodb_lock_wait_timeout設置鎖等待的時間是50s,一旦數據庫鎖超過這個時間就會報錯數據庫

解決方法:

一、查看數據庫當前的進程,看一下有無正在執行的慢SQL記錄線程。segmentfault

mysql> show  processlist;

二、查看當前的事務
當前運行的全部事務服務器

mysql> SELECT * FROM information_schema.INNODB_TRX;

當前出現的鎖併發

mysql> SELECT * FROM information_schema.INNODB_LOCKs;

鎖等待的對應關係高併發

mysql> SELECT * FROM information_schema.INNODB_LOCK_waits;

解釋:看事務表INNODB_TRX,裏面是否有正在鎖定的事務線程,看看ID是否在show processlist裏面的sleep線程中,若是是,就證實這個sleep的線程事務一直沒有commit或者rollback而是卡住了,咱們須要手動kill掉。學習

搜索的結果是在事務表發現了不少任務,這時候最好都kill掉。區塊鏈

三、批量刪除事務表中的事務
我這裏用的方法是:經過information_schema.processlist表中的鏈接信息生成須要處理掉的MySQL鏈接的語句臨時文件,而後執行臨時文件中生成的指令。spa

mysql>  select concat('KILL ',id,';') from information_schema.processlist where user='cms_bokong';
+------------------------+
| concat('KILL ',id,';') |
+------------------------+
| KILL 10508;            |
| KILL 10521;            |
| KILL 10297;            |
+------------------------+
18 rows in set (0.00 sec)

固然結果不可能只有3個,這裏我只是舉例子。參考連接上是建議導出到一個文本,而後執行文本。而我是直接copy到記事本處理掉 ‘|’,粘貼到命令行執行了。均可以。
kill掉之後再執行SELECT * FROM information_schema.INNODB_TRX; 就是空了。

這時候系統就正常了

故障排查

3.一、mysql都是autocommit配置

mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
|            0 |
+--------------+
1 row in set (0.00 sec)

# 若是是0 ,則改成1
mysql> set global autocommit=1;

3.二、mysql的引擎檢查,能夠檢查一下數據庫引擎是否是InnoDB(mysql5.5.5之前默認是MyISAM,mysql5.5.5之後默認是InnoDB)

show ENGINES; #檢查命令
若是不是的話改成 InnoDB :

查看錶使用的存儲引擎

show table status from db_name where name='table_name';

修改表的存儲引擎

alter table table_name engine=innodb;



歡迎訂閱「K叔區塊鏈」 - 專一於區塊鏈技術學習

博客地址: http://www.jouypub.com
簡書主頁: https://www.jianshu.com/u/756c9c8ae984
segmentfault主頁: https://segmentfault.com/blog/jouypub
騰訊雲主頁: https://cloud.tencent.com/developer/column/72548
相關文章
相關標籤/搜索