如何使用 MySQL/Amazon RDS 调试锁超时?

如何使用 MySQL/Amazon RDS 调试锁超时?

我们在 Amazon Web Services 上托管了一个 Web 应用。我们的数据库是运行 5.1.57 的多可用区 RDS MySQL 服务器,有 3-4 个应用服务器与其通信。

今天,我们开始看到很多类似“锁定等待超时;尝试重新启动事务”的错误 - 几乎 1% 的 POST 请求都会看到这种情况。

网站运行的代码没有经过任何修改。没有架构更改。我们的流量没有大幅增加。我一直在查看正在运行的进程,似乎没有一个进程失控。

我尝试将我们的 RDS 实例从小扩展到大,但没有效果。

两天前,亚马逊发生了一些中断。作为恢复的一部分,我们的 RDS 服务器和应用服务器最终位于不同的可用区,但都在同一区域内。但昨天一切都很好,所以我不相信这与此有关。

锁超时存在于不同类型的请求中,并且发生在不同的 InnoDB 表中。

我注意到,当我们开始发现问题时,打开的连接数量会猛增,但这也许只是一种症状,而不是原因。

调试此问题时我的下一步是什么?

连接图

答案1

可能发生的情况是支持 RDS 实例的一个或多个 EBS 卷出现 IO 丢失。EBS 重新镜像导致的 IO 减少量对数据库的影响相当显著。

如果您购买了高级支持,该团队可以为您调查此类细节,或者您可以尝试在 AWS 论坛上提问。RDS 工程师可能会确认潜在的 EBS 问题或原因是什么。

相关内容