记一次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;

再查看进程,发现那个进程已经不在了


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容