检查Mysql数据是否存在死锁

本文详细解析了MySQL数据库中出现死锁的原因,主要聚焦于外键未加索引及位图索引并发更改的问题。通过具体案例,指导读者如何在MySQL中查看死锁日志,分析死锁信息,并提供了一种定位和解决死锁的方法。

转自:https://blog.csdn.net/tangyali516/article/details/70239774

 

服务器运行一天后,就开始频繁报错:Deadlock found when trying to get to lock; try restarting transaction.

死锁的头号原因是外键未加索引,第二号原因是位图索引遭到并发更改;

方法和步骤

  1.  

    如何查看MySQL数据库的死锁日志 

    1. 使用终端或命令提示符登录到MySQL,输入命令:mysql -h xxxx.xxx.xxx -P 3306 -u username -p 
    解释:xxxx.xxx.xxx是数据库IP地址,username是数据库用户名,输入命令后,会让你输入username对应的密码,就可以登录了 
     

    2. 如何查看MySQL数据库的死锁信息 
    在MySQL客户端下输入命令: 
    show engine innodb status \G; 

     

    3. 如何定位MySQL数据库的死锁信息 
    在打印出来的信息中找到“LATEST DETECTED DEADLOCK”一节内容,看图中红线 


    4. 如何分析日志,定位死锁原因 
    看3里面的图,紫色划线部分 

    分析: 
    事务1,等待 
    RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`,这个位置的X锁 
    事务2,持有 
    RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`这个地方的S锁 
    事务2,等待这个地方的X锁 

    理论上这个事务2是可以提交的,不会死锁,但是这个事务日志只打印最后一部分死锁,信息,这里面隐含的条件是,事务1也持有 RECORD LOCKS space id 553 page no 376 n bits 368 index `index_user_id` of table `tbj`.`score_user`这个地方的S锁,这样,事务2不能加X锁,同时事务1也不能加X锁,产生死锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值