mysql查看及解除死锁(附测试锁sql及一位大佬排查index_merge造成死锁的过程)

解除正在死锁的状态有两种方法:

第一种:

1.查询是否锁表

show OPEN TABLES where In_use > 0;

2.查询进程(如果有SUPER权限,可以看到所有线程。否则,只能看到自己的线程)

show processlist

3.杀死进程id(就是上面命令的id列)

kill id
例子:
查出死锁进程:SHOW PROCESSLIST
杀掉进程          KILL 555555;

第二种:

1.查看下有锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

2.杀死进程id(就是上面命令的trx_mysql_thread_id列)

kill trx_mysql_thread_id的值
例子:
查出死锁进程:SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;
杀掉进程          KILL 777777;

其它关于查看死锁的命令:

1:查看当前的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX;

2:查看当前锁定的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;

3:查看当前等锁的事务

SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
友情提示:kill 命令请谨慎使用。

测试锁sql

  • session1
#sql控制事务,
#开启事务
START TRANSACTION;
SELECT* FROM user;
UPDATE user SET age= age-1 WHERE id =1;
SELECT* FROM user;
COMMIT;
#回滚会取消开启到结束的所有sql
ROLLBACK;

#查看修改后的数据,验证事务
SELECT* FROM user;
  • session2
#sql控制事务,
#开启事务
START TRANSACTION;
SELECT* FROM user;
UPDATE user SET age= age-2 WHERE id =1;
SELECT* FROM user;
COMMIT;
#回滚会取消开启到结束的所有sql
ROLLBACK;

#查看修改后的数据,验证事务
SELECT* FROM user;

附大佬排查index_merge造成死锁的过程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值