記一次Mysql事物鎖等待超時 Lock wait timeout exceeded; try restarting transaction

問題發生背景:

在MySQL執行更新語句,大概也就一千行左右,執行不成功,報如下錯誤



然後開始漫長的排查過程
參考網上的各種原因分析,歸根結底是以下原因,在高併發的情況下,多人多線程操作數據庫造成死鎖,後續操作超時拋出異常。
MySQL數據庫採用innodb引擎,默認參數:innodb_lock_wait_timeout設置鎖等待的時間是50s,一旦數據庫鎖超過這個時間就會報錯。

解決方案:

1.查看各項參數,發現超時相當嚴重
show status like '%lock%';



2.show processlist;



當我準備kill 掉它時 發現kill不了

然後開始查mysql 服務關於event_scheduler(事件調度器)

MySQL中的時間調度器events_cheduler類似於linux中的crontab計劃任務的功能,它是由一個特殊的時間調度線程執行的
1.查看當前是否開啓了event_scheduler三種方法:
show variables like 'event_scheduler';
select @@event_scheduler;
show processlist;(是否有user爲event_scheduler)
2.關閉事件調度器
set global event_scheduler = OFF;
對應開啓
set global event_scheduler = ON;

再查看進程,發現那個進程已經不在了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章