InnoDB死锁分析、解决方法论梳理


在工作中遇到了两个死锁报警,梳理一下关于Innodb死锁相关的知识。主要的内容并不是相关的知识点而是相关知识体系的梳理。最终提供的分析及解决方法论、解决方案也是通用性的提示;本着具体情况具体分析的原则所以这些提示的应用需要相应的知识点进行支撑。

img

加锁分析法

解决死锁首先要了解死锁发生的原因,加锁分析法也就是死锁解决的最基础能力。

当然进行分析首先需要尽可能的收集各种已知的信息,所以理解Innodb Status、information_schema的innodb表、innodb_status_output日志等内容也就成了必备能力。

在进行加锁分析的过程中,可能有些细节并不能很好的根据已知的条目进行解释,这时候最好的方法就是看看代码运行过程中实际加了哪些锁。通过代码调试可以更好的了解加锁的细节、印证加锁的猜测,所以代码调试功能可以说是死锁分析法的高级辅助手段。

当然要想了解每个细节,最终的方法还是阅读源码,但是对于一个非DBA的程序开发人员来说可能没有必要。大多数情况根据已知的InnoDB的加锁原则就能找到问题,也就是根据图片右上、左上两部分的知识点即可以完成。

解决方案提示

解决方案主要划分为日常检测、SQL优化、代码级别鲁棒性处理及数据库调整。这些内容都是通用性提示,具体情况具体分析才能找到最优的解决方案。

本文采用CC BY-SA许可发布,您可以自由的转载分享。

转载请保留出处 BeanMr.
http://blog.beanmr.com/2016/07/13/innodb-deadlock-overview/