【问题标题】:MySQL Error Code: 1205. Lock wait timeout exceeded; try restarting transaction on insertMySQL 错误代码:1205。超过锁定等待超时;尝试在插入时重新启动事务
【发布时间】:2018-01-12 16:40:25
【问题描述】:

我正在向我的一个表中插入数据,但我不断获得锁。

insert into inventory_files(id, pro_id) values(30,6569);

我收到以下错误。

Error Code: 1205. Lock wait timeout exceeded; try restarting transaction    51.004 sec

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ; 

然后插入该数据。

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ ; 

插入其他表没有问题。任何其他建议。
我也跑了。

SHOW ENGINE INNODB STATUS;

没有锁定的表。

'InnoDB', '', '

2017-08-04 13:57:34 0x7f0c44461700 INNODB 监视器输出 从过去 29 秒计算的每秒平均值

背景线

srv_master_thread 循环:93 srv_active,0 srv_shutdown,2985 srv_idle

srv_master_thread 日志刷新和写入:3076

信号量

OS WAIT ARRAY INFO:预留计数 29

OS WAIT ARRAY INFO:信号计数 29

RW 共享旋转 0,第 52 轮,操作系统等待 26

RW-excl 旋转 0,回合 0,操作系统等待 0

RW-sx 旋转 0,回合 0,操作系统等待 0

每次等待的旋转轮数:52.00 RW-shared、0.00 RW-excl、0.00 RW-sx

交易

Trx id 计数器 2147575956\n 清除已完成 trx 的 n:o

历史列表长度 91

每个会话的交易清单:

---事务421165916588792,未开始

0 锁结构,堆大小 1136,0 行锁

---事务421165916587872,未开始

0 锁结构,堆大小 1136,0 行锁

---事务 2147575922,活动 104 秒

6 锁结构,堆大小 1136,52 行锁,撤消日志条目 5

MySQL 线程 id 32,OS 线程句柄 139690660574976,查询 id 43020 localhost 127.0.0.1 my_web_user

---事务 2147575860,活动 211 秒

6 锁结构,堆大小 1136,52 行锁,撤消日志条目 5 MySQL 线程 id 30,OS 线程句柄 139690661377792,查询 id 40076 localhost 127.0.0.1 my_web_user

---事务 2147575771,活动 413 秒 6 个锁结构,堆大小 1136,52 行锁,撤消日志条目 5 MySQL 线程 id 23,OS 线程句柄 139690660976384,查询 id 35541 localhost 127.0.0.1 my_web_user

---事务 2147575640,活动 540 秒 6 个锁结构,堆大小 1136,52 行锁,撤消日志条目 28 MySQL 线程 id 16,OS 线程句柄 139690661177088,查询 id 29555 localhost 127.0.0.1 my_web_user

---事务 2147575372,活动 990 秒 6 个锁结构,堆大小 1136,52 行锁,撤消日志条目 28 MySQL 线程 id 11,OS 线程句柄 139690661578496,查询 id 4137 localhost 127.0.0.1 my_web_user

Trx 读取视图不会看到 id >= 2147575373 的 trx,看到

【问题讨论】:

  • "没有锁定的表。"虽然在技术上是正确的(因为 InnoDB 锁定行,而不是表),但你当然有一个锁。 SHOW ENGINE INNODB STATUS; 其实是一个寻找它的好地方,所以再看一遍,你可能只是没有找到它。或者将输出添加到您的问题中,我们也许可以帮助您找到它。
  • 再次锁定。我将发布引擎输出。
  • 您需要在锁定被授予时检查状态(因此在错误发生之前)。你会发现类似------- TRX HAS BEEN WAITING 20 SEC FOR THIS LOCK TO BE GRANTED: 的东西。如果您不知道它何时发生,并且您无法重新启动事务以重复这种情况(或者它已解决并且您没有再次遇到锁定错误),您可以例如每 50 秒保存一次状态(也许在 cronjob 中获取并记录它),以便在它发生后查看它。

标签: mysql


【解决方案1】:

我出现此错误的主要原因是现有进程正在运行时,这会阻止在同一个表上执行新进程。

试试

Show full processlist; kill x;

将 x 替换为您认为导致问题的进程号

【讨论】:

    【解决方案2】:

    显示完整的进程列表;杀死 x;

    在工作台使用长查询时为我工作;

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 2016-08-01
      • 2019-06-02
      • 2013-02-05
      • 2021-01-12
      • 2021-08-07
      • 1970-01-01
      • 2018-04-17
      • 2014-09-05
      相关资源
      最近更新 更多