【Mysql】mysql鎖等待Lock wait timeout exceeded; try restarting transaction

查詢全局等待事務鎖超時時間

SHOW GLOBAL VARIABLES LIKE ‘innodb_lock_wait_timeout’;

設置全局等待事務鎖超時時間

SET GLOBAL innodb_lock_wait_timeout=100;

查詢當前會話等待事務鎖超時時間

SHOW VARIABLES LIKE ‘innodb_lock_wait_timeout’;
問題場景
問題出現環境:
1、在同一事務內先後對同一條數據進行插入和更新操作;
2、多臺服務器操作同一數據庫;
3、瞬時出現高並發現象;

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

解決方案

  1. 運行以下命令,查找提交事務的數據,殺掉線程即可解決
  2. select * from information_schema.innodb_trx

kill thread_id;
2. 增加鎖等待時間,即增大下面配置項參數值,單位爲秒(s)
3. innodb_lock_wait_timeout=500
3、優化存儲過程,事務避免過長時間的等待。
如下圖,殺的是這個ID
在這裏插入圖片描述