问题发生背景:
在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;
再查看进程,发现那个进程已经不在了