問題發生背景:
在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;
再查看進程,發現那個進程已經不在了