记一次mysql数据库死锁排查

Aquarius的小站 / 2023-08-28 / 原文

症状:进行表的ddl操作时,一直在loading,等待响应

怀疑锁表,查询进程表,发起的语句在等待被锁表

# show processlist;

进一步明确当前被锁定的表

# show open tables where in_use > 0;

果然是目标表

参考:https://blog.csdn.net/songxi_bo/article/details/121700745

优先检查是否有事务操作未提交

# select * from information_schema.innodb_trx;

找到确实有事务未提交,找到对应的进程id

回到进程表,找到目标进行,后续对该机器上的应用进行分析,这里要先关闭它

# show processlist;

# kill 1181;

删除后,ddl语句执行成功

 

后记:后续通过定位机器,找到对应的程序,仔细排查代码后,发现是该应用未及时释放connection导致,查询后释放就解决该问题。