标签:避免 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选项,降低死锁检测开销,提高并发效率。
标签:避免 sql 生产环境 使用 最好 col 过程 mys 事务
原文地址:https://www.cnblogs.com/zhouwanchun/p/13150916.html