ITPub博客

首页 > 数据库 > > 数据库有问必答 | 如何定位PolarDB出现死锁的原因?

数据库有问必答 | 如何定位PolarDB出现死锁的原因?

作者:ITPUB学院 时间:2022-01-12 16:04:04 0 删除 编辑

Q: 如何定位PolarDB出现死锁的原因?

你可以利用DAS的锁分析功能与SQL洞察功能进行死锁定位,详细操作方法和注意事项如下:

  • 背景信息

    死锁是关系型数据库系统中最为常见的错误,出现在不同事务中同时对某些数据访问加锁时,都要等待对方请求中的数据而无法获取锁。数据库系统会自动牺牲回滚代价最小的事务,从而导致对应的写请求失败。更严重的情况是在大量死锁发生时,会导致数据库系统效率低下,大量进程堆积进而引发性能问题。正常情况下,死锁都是由于逻辑加锁的顺序导致的,也就是我们常说的ABA死锁。

  • 死锁定位

    登录PolarDB控制台,在诊断与优化>一键诊断中选择锁分析,单击立即诊断。如果集群存在死锁,会在发现死锁列出现”是”。目前诊断功能只能拉取最后一次死锁,同样是从innodb status中获取的。如果集群不重启,死锁信息会一直保留最后一组日志,所以需要确认诊断后的日志是不是存量死锁问题,也就是说发现的死锁不一定是新出现的死锁。发现死锁后,单击查看详情,会显示格式化后的死锁信息。

  • 事物流定位

    事务流定位的前提条件是在死锁发生前,PolarDB控制台已经开启了SQL洞察功能,才能对执行过的语句进行定位。通过死锁定位,可以获取到回滚的事务、发生死锁的语句、thread_id。

注:本文所说的死锁是指deadlock,而非事务锁造成的阻塞(block)。

来源:https://mp.weixin.qq.com/s/ICMVbKM2IW_ioLbb7XVeDg

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31535056/viewspace-3149432/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-05-16

  • 博文量
    737
  • 访问量
    377185