Q: 如何定位PolarDB出现死锁的原因?
你可以利用DAS的锁分析功能与SQL洞察功能进行死锁定位,详细操作方法和注意事项如下:
背景信息
死锁是关系型数据库系统中为常见的错误,出现在不同事务中同时对某些数据访问加锁时,都要等待对方请求中的数据而无法获取锁。数据库系统会自动牺牲回滚代价小的事务,从而导致对应的写请求失败。更严重的情况是在大量死锁发生时,会导致数据库系统效率低下,大量进程堆积进而引发性能问题。正常情况下,死锁都是由于逻辑加锁的顺序导致的,也就是我们常说的ABA死锁。
死锁定位
登录PolarDB控制台,在诊断与优化>一键诊断中选择锁分析,单击立即诊断。如果集群存在死锁,会在发现死锁列出现”是”。目前诊断功能只能拉取后一次死锁,同样是从innodb status中获取的。如果集群不重启,死锁信息会一直保留后一组日志,所以需要确认诊断后的日志是不是存量死锁问题,也就是说发现的死锁不一定是新出现的死锁。发现死锁后,单击查看详情,会显示格式化后的死锁信息。
事物流定位
事务流定位的前提条件是在死锁发生前,PolarDB控制台已经开启了SQL洞察功能,才能对执行过的语句进行定位。通过死锁定位,可以获取到回滚的事务、发生死锁的语句、thread_id。
来源:https://mp.weixin.qq.com/s/ICMVbKM2IW_ioLbb7XVeDg