【问题标题】:Debugging MySQL Deadlocks on Amazon RDS调试 Amazon RDS 上的 MySQL 死锁
【发布时间】:2011-09-16 21:15:00
【问题描述】:

我的 MySQL 数据库(一个 Amazon RDS 实例)上出现越来越多的“死锁”和“锁定超时”问题。直到几天前,该数据库一直运行良好。超过一周没有对服务器代码(执行查询)进行任何更改。我知道异常是什么,但我不知道调试和查找导致问题的特定查询/语句的最佳方法。

设置信息:

  • MySQL Amazon RDS 实例(小)
  • RDS 配置文件/MySQL 设置中的所有默认设置,字符编码除外,字符编码已更改为 UTF-8
  • 进行查询的服务器是带有 Hibernate 的 Tomcat Java 服务器
  • 异常信息从 Tomcat 服务器日志中读取
  • 查询次数/最小值在 50 - 5000 之间

我最好的猜测是设置(Hibernate 或 MySQL)中存在导致此问题的某些东西。服务器将运行良好,然后延迟将通过屋顶导致各种负面行为。发生这种情况时,实例的 CPU 利用率将接近 100%。

休眠设置为:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
    <property name="driverClass"><value>com.mysql.jdbc.Driver</value></property>
    <property name="jdbcUrl"><value>XXXX</value></property>
    <property name="user"><value>XXXX</value></property>
    <property name="password"><value>XXXX</value></property>
    <property name="initialPoolSize"><value>3</value></property>
    <property name="minPoolSize"><value>3</value></property>
    <property name="maxPoolSize"><value>50</value></property>
    <property name="idleConnectionTestPeriod"><value>200</value></property>
    <property name="acquireIncrement"><value>1</value></property>
    <property name="maxStatements"><value>0</value></property>
    <property name="numHelperThreads"><value>6</value></property>
</bean>

如果设置中的某些内容可能导致此问题,请了解从哪里开始调试。

【问题讨论】:

  • 你找到答案了吗?
  • SHOW ENGINE INNODB STATUS 命令的输出是什么?
  • 您应该查看过 RDS 错误日志。死锁记录在那里

标签: mysql hibernate amazon-web-services


【解决方案1】:

我知道很难找到问题,但您可以从定位导致死锁的查询开始,使用:

SHOW FULL PROCESSLIST

MYSQL Reference

希望这将帮助您开始

【讨论】:

  • 不幸的是,它只显示当前正在执行的查询。 RDS 维护一个错误日志,保留一些历史记录
  • 没错,你可以查看日志,你可以显示所有的过程开始解决问题
【解决方案2】:

你应该尝试使用“show engine innodb status”。它通常会给出很多部分,但你会感兴趣的部分是关于死锁的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-28
    • 2018-03-06
    • 1970-01-01
    • 2020-03-04
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多