死锁发生了如何排查
参考文章:
- 死锁日志如何查看(MySQL死锁系列-线上死锁问题排查思路-腾讯云开发者社区-腾讯云)
- InnoDB 死锁bug排查实例
- mysql8.0.18死锁检测源码分析: MySQL 死锁检测源码分析
- 死锁日志
- 开启死锁日志记录
- 分析日志
- 从bin log中查看具体发生死锁的sql语句和过程
步骤
- 线上错误日志报警发现死锁异常
- 查看错误日志的堆栈信息
- 查看 MySQL 死锁相关的日志
- 根据 binlog 查看死锁相关事务的执行内容
- 根据上述信息找出两个相互死锁的事务执行的 SQL 操作,根据本系列介绍的锁相关理论知识,进行分析推断死锁原因
- 修改业务代码
根据这样的顺序进行死锁日志信息的查看,主要是为了系统化地分析死锁发生的原因,确保能够逐步且全面地理解问题。以下是每个步骤的具体作用及其获取的信息:
- 查看错误日志的堆栈信息:
- 作用:错误日志记录了死锁发生的相关信息,包括事务ID、错误代码、时间戳等。通过堆栈信息,可以快速定位死锁发生的具体操作和上下文。
- 获取的信息:死锁发生时的事务状态、相关SQL语句、调用堆栈等。
- 查看MySQL死锁相关的日志:
- 作用:使用
SHOW ENGINE INNODB STATUS
命令可以获取最近一次的死锁信息。这是分析死锁的第一手资料,提供关于死锁的详细状态。 - 获取的信息:包括死锁的事务ID、持有的锁、等待的锁、执行的SQL等。
- 作用:使用
- 根据binlog查看死锁相关事务的执行内容:
- 作用:binlog记录了所有事务执行的SQL语句,能够帮助我们了解在死锁发生前后,相关事务执行了哪些操作。
- 获取的信息:完整的SQL执行历史,有助于分析事务之间的冲突。
- 找出相互死锁的事务执行的SQL操作:
- 作用:通过对比两个死锁事务的SQL操作,可以识别出导致死锁的具体原因,为后续的修改和优化提供依据。
- 获取的信息:具体的SQL语句、执行顺序、锁类型等。
总结来说,这样的顺序帮助我们从宏观到微观、从表面到深层次地理解死锁的原因,最终找到解决方案。通过逐步分析,可以更有效地定位问题,减少处理死锁时的时间和精力消耗。
如何解决发生的死锁
死锁是如何发生的?
小林。。。