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


    生产环境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选项,降低死锁检测开销,提高并发效率。
  • 相关阅读:
    用Interface Builder自定义View
    UINavigationController
    pod install 失败
    关于@synchronized(self)的用法(转)
    杂记
    理解REST软件架构
    ios NSNotificationCenter消息注册与撤销
    UIApplication sharedApplication详细解释-IOS
    ios 数据持久化的三种方式
    '*.h' file not found
  • 原文地址:https://www.cnblogs.com/zhouwanchun/p/13150916.html
Copyright © 2020-2023  润新知