【问题标题】:MySQL Error: Lock wait timeout exceeded; try restarting transaction QueryMySQL 错误:超过锁定等待超时;尝试重新启动事务查询
【发布时间】:2014-09-05 04:31:49
【问题描述】:

我发现很多人从 MySQL 收到相同的错误消息,错误状态相同=41000 和错误代码相同=1205。

但其中大多数涉及 2 个事务和一个死锁。

基于SHOW ENGINE INNODB STATUS的输出,只有1笔交易:

====================================== 140715 4:42:37 INNODB 监控输出 ====================================== 从过去 21 秒计算的每秒平均值 ---------- 信号量 ---------- OS WAIT ARRAY INFO:保留计数 1630,信号计数 1612 互斥体自旋等待 0,回合 10461,操作系统等待 205 RW 共享旋转 2051,操作系统等待 1024; RW-excl 旋转 407,操作系统等待 380 ------------ 交易 ------------ Trx id 计数器 0 8450727 清除已完成 trx 的 n:o = 0 8450726 的 trx,看到
mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation, @@session.tx_isolation;
+-----------------------+-----------------+------------------------+
| @@GLOBAL.tx_isolation | @@tx_isolation  | @@session.tx_isolation |
+-----------------------+-----------------+------------------------+
| REPEATABLE-READ       | REPEATABLE-READ | REPEATABLE-READ        |
+-----------------------+-----------------+------------------------+
1 row in set (0.00 sec)

如果我将自动提交设置为 true(我使用的是 Apache Common DBCP 1.4)建立连接,则不存在此问题。

【问题讨论】:

    标签: java mysql apache-commons-dbcp


    【解决方案1】:

    我发现了问题。

    问题在于 MySQL 期望同一事务中的所有查询都在同一 TCP 连接中完成,而通过 QueryRunner 执行的每个 SQL 都可能会启动到数据库的新 TCP 连接(尽管它可以通过多种方式进行控制)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 2015-09-27
      • 2019-03-11
      • 2013-02-05
      • 2019-06-02
      • 1970-01-01
      • 2013-09-22
      • 2013-06-29
      相关资源
      最近更新 更多