记一次Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction

问题发生背景:

在MySQL执行更新语句,大概也就一千行左右,执行不成功,报如下错误


记一次Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction_第1张图片

然后开始漫长的排查过程
参考网上的各种原因分析,归根结底是以下原因,在高并发的情况下,多人多线程操作数据库造成死锁,后续操作超时抛出异常。
MySQL数据库采用innodb引擎,默认参数:innodb_lock_wait_timeout设置锁等待的时间是50s,一旦数据库锁超过这个时间就会报错。

解决方案:

1.查看各项参数,发现超时相当严重
show status like '%lock%';


记一次Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction_第2张图片

2.show processlist;


记一次Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction_第3张图片

当我准备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;

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


记一次Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction_第4张图片

你可能感兴趣的:(记一次Mysql事物锁等待超时 Lock wait timeout exceeded; try restarting transaction)