1、首先简单的制造一个锁
#事务A
mysql> begin;
mysql> delete from action1 where id = 3;
#事务B
mysql> update action1 set id = 7 where id = 3;
2、通过show processlist命令只能看到一条正在执行的SQL语句,即事务B的语句
3、通过information_schema的INNODBTRX、INNODBLOCKS 、INNODBLOCK_WAITS三张表可以获得一个锁信息,从下图可以看出thread_id为22188的SQL语句锁住了后面的更新操作,但是show processlist中并未看到这条事务。在测试环境可以直接kil对应的线程号,但生产环境中要找到对应的SQL语句,再考虑接下来应该怎么处理

4、结合 performance_schema.threads找到对应的事务
mysql> select * from performance_schema.threads where processlist_ID = 22188\G # 关注THREAD_ID,这个就是事务号,假设22225
5、从events_statements_current表的SQL_TEXT列可以找到对应的SQL语句
mysql> select * from performance_schema.events_statements_current where THREAD_ID = 22225\G
6、和业务方确认是否可以直接KILL
3261

被折叠的 条评论
为什么被折叠?



