1、背景
- 不知道怎么回事我重复操作一张表,感觉像死锁,但是查询死锁表却没有数据,在这张表执行任何SQL语句都没有用。
2、分析
- 可能是死锁
-
怎么查询是否死锁
-
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
-
-
怎么查询是否等待
-
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
-
-
怎么查询当前是否执行中的事务
-
SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
-
-
怎么查询当前数据库处理线程列表
-
show full PROCESSLIST;
-
-
怎么删除或杀掉卡住事务
-
kill 线程id/pid
-
2.1、处理经过
-
首先执行 1,2 sql发现并没有死锁或等待,但是这张表却执行SQL还是很慢,几分没有执行结果
-
然后我执行4,仔细查看state 和info字段 是否有waiting关键字,还是你的表(由于涉及隐私,不截取具体数据)
- 然后我发现确实有waiting关键字,怎么删除这一条数据呢?
- 执行 5命令, 也就 kill id (这个表主键)
-
删除 processList 有涉及对应表waiting的数据,准备执行这个表SQL还是卡住了。
-
执行 3、 查询所有正在运行事务,发现还有7条正在运行,具体不清除为什么一直在运行,没有结果,此时删除这个事务的数据
- kill trx_mysql_thread_id字段(线程id)
2.3、总结
- 这些表是有关联的