【MySQL运维】如何正确的找到和处理上锁的SQL语句

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 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值