分析mysql数据库死锁

1、查看当前运行的所有事务 

        SELECT * FROM information_schema.INNODB_TRX;
2、 查看当前出现的锁 

        SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
3、锁等待的对应关系

        SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 

4、模拟死锁通过上面三个命令查看结果如下

解决方案如下: 

5、show processlist;

       查看运行线程id 当然第一条命令 trx_mysql_thread_id也可以

       kill id

执行kill命令

6、Lock wait timeout exceeded; try restarting transaction异常

    也会出现这个异常倒了锁等待的最大时间innodb_lock_wait_timeout

   可查看数据库的锁等待时间

SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';

   然后设置对应的时间

SET GLOBAL innodb_lock_wait_timeout=180;

缺点:全局更改,影响也是全局的,等待时间加长,容易使等待事务增多导致堆积问题。

7、找到对应死锁sql,分析优化解决

附上简单的模拟死锁:

建表语句:
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
事务1
START  TRANSACTION 第一步
SELECT * FROM `user` where id = 2 ; 第二步

delete FROM `user` where id = 2 ; 第五步
commit

事务2
START  TRANSACTION 第三步

delete FROM `user` where id = 2 ; 第四步

commit

执行完以上五步就会出现死锁可通过命令进行查看测试

以上是随笔 有问题可指出

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值