MySQL死锁导致服务异常
故障表现
用户反馈ONES页面响应越来约慢、很快就无法打开。project-api等日志报错如下:
insert or update access time is error:<SQLError> Error 1205: Lock wait timeout exceeded; try restarting transaction
故障根因
MySQL中出现锁表或长时间等待的事务线程,导致业务异常。
解决方案
手工杀掉引起死锁的会话,快速恢复业务。
# 先登录数据库
# 查看进程
SHOW FULL PROCESSLIST;
# 检测是否有会话状态为Waiting for query cache lock,如果是,证实为存在死锁
# 如下方式,找到非sleep、且长时间响应异常的会话
SELECT CONCAT('KILL ', ID, ';') AS kill_command
FROM information_schema.PROCESSLIST
WHERE COMMAND != 'Sleep' AND TIME > 60;
# 将上述结果复制执行