问题
UPDATE USER_STATUS
SET REMEMBER_ME = '[["soo6K5cZk","thilY3jZk","5865d0554677eff2ba06014891a5635a",1734675764872]'
WHERE USER_ID = 'xxx'
# 报错 Lock wait timeout exceeded; try restarting transaction
排查
- 查询当前运行的sql,以分析是否有锁冲突
show processlist;
# 结果只有当前运行的sql,这条update只有单条数据,理论上应该很快,但当前已经执行了超过 40 秒,到最后反馈超时
- 查询当前的事物表,存在哪些事物在执行
select * from information_schema.innodb_trx;
# 查询到这条sql已经回滚结束了,但是仍然有一个几小时之前的事物,没有显示sql语句
- 根据其id,和运行中的信息关联查询
select * from (SELECT * FROM information_schema.processlist p LEFT JOIN information_schema.INNODB_TRX t ON p.id = t.trx_mysql_thread_id) a where id=7936144\G;
# 发现其状态是 Running,但没有sql
如何处理
评估对业务影响不大,所以杀掉这个线程id后执行正常
评论