处理数据库中长时间运行的事务
查找长时间运行的事务
- SHOW ENGINE INNODB STATUS;
- 显示 InnoDB 存储引擎的状态信息,包括当前的锁定情况,相关的事务id及运行时间等等。
- 在下图中可以看到,id为580527的事务已经运行了368秒,这属于是长时间运行的事务。
查看当前数据库下的所有线程情况
- SHOW FULL PROCESSLIST;
- 显示当前所有线程的信息,包括正在执行的查询、线程状态等。这个命令在诊断和监控数据库性能时非常有用。
- 现在我们需要做的就是查询当前数据库下所有线程的情况列表
-下图中,我们就可以找到,长时间运行的事务,例如途中标注的8616-8627都是是等待运行的sql语句,已经等待时间627秒钟
使用KILL语句删除对应线程
- KILL <thread_id>;
- 确定这些事务不再需要,可以使用 KILL 命令来结束它们。
- 首先通过上一步的 SHOW FULL PROCESSLIST; 找到对应的线程 ID,然后执行
再次查看当前数据库下的所有线程情况
- SHOW FULL PROCESSLIST;
- 操作同第二步,查看那几个线程是否还存在即可
- 我再次执行的时候,相对应的几个线程id都已经不存在了,被kill掉了,就不演示了。