码迷,mamicode.com
首页 > 数据库 > 详细

生产环境MySQL死锁如何监控及如何减少死锁发生的概率。

时间:2020-06-17 10:57:04      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:避免   sql   生产环境   使用   最好   col   过程   mys   事务   

生产环境MySQL死锁如何监控及如何减少死锁发生的概率。


首先,死锁并不是"锁死",死锁是由于两个或两个以上会话锁等待产生回路造成。


一、死锁监控及处理方法
对于死锁的监控,各个版本都提供了innodb_print_all_deadlocks选项,打开该选项即会将死锁的日志输出到MySQL的错误日志当中,因此可以通过监控错误日志来达到监控死锁的目的。而对于MariaDB就更加简单了,MariaDB提供了Innodb_deadlocks的计数器,可以通过监控该计数器的增长来监控是否存在发生死锁。
假如线上出现死锁并且频率较高的话,务必要引起重视。由于死锁日志仅记录了最后引起死锁的两条SQL,因此并不能通过死锁日志立即定位。
出死锁的原因,应当及时协同开发模拟出死锁过程,分析死锁产生原因,修改程序逻辑。


二、如何降低死锁发生的概率
1、尽量使用短小事务,避免大事务。
2、加FOR UPDATE/LOCK IN SHARE MODE锁时,最好降低事务隔离级别,例如用RC级别,降低死锁发生概率,也可以降低锁定粒度。
3、事务中涉及多个表,或者涉及多行记录时,每个事务的操作顺序都要保持一致。
4、通过索引优化SQL效率,降低死锁概率,避免全表扫描导致锁定所有数据。
5、程序中应有事务失败检测及自动重复提交机制。
6、高并发(秒杀)场景中,关闭innodb_deadlock_detect选项,降低死锁检测开销,提高并发效率。

 

生产环境MySQL死锁如何监控及如何减少死锁发生的概率。

标签:避免   sql   生产环境   使用   最好   col   过程   mys   事务   

原文地址:https://www.cnblogs.com/zhouwanchun/p/13150916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!