【发布时间】:2013-07-27 08:42:26
【问题描述】:
我看到 MySQL 5.6 出现死锁,因为似乎试图锁定同一行两次。
从下面的 sn-p 中,id = (11, 12, 13, 14, 15) 的行已经有了锁。当另一个事务试图获取这些锁时,MySQL 检测到死锁的事务失败。
我对此的理解正确吗?如果是这样,MySQL 5.6 中有什么可以解决这个问题吗? FWIW,5.5 中的相同代码运行良好(数百次迭代)。
---------------------- 最新检测到的死锁 ---------------------- 2013-07-25 11:46:05 13a515000 *** (1) 交易: TRANSACTION 2333130,ACTIVE 0 秒获取行 mysql 表正在使用 1,锁定 1 LOCK WAIT 31 个锁结构,堆大小 6960,6 行锁 MySQL 线程 id 2944,OS 线程句柄 0x13ae88000,查询 id 184533 localhost 127.0.0.1 root 发送数据 SELECT id FROM table_meta WHERE id IN (11, 12, 13, 14, 15) FOR UPDATE *** (1) 等待授予此锁定: RECORD LOCKS 空间 id 128954 页号 5 n 位 176 表 `db_test1`.`table_meta` 的索引 `PRIMARY` trx id 2333130 lock_mode X 锁定记录但不锁定间隙等待 *** (2) 交易: TRANSACTION 2333255,ACTIVE 0 秒开始索引读取 mysql 表正在使用 1,锁定 1 3 个锁结构,堆大小 1248,11 行锁 MySQL 线程 id 2927,OS 线程句柄 0x13a515000,查询 id 186769 localhost 127.0.0.1 root 发送数据 SELECT id FROM table_meta WHERE id IN (1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 13, 14, 15) 进行更新 *** (2) 持有锁: 记录锁空间 id 128954 页号 5 n 位 176 表 `db_test1`.`table_meta` 的索引 `PRIMARY` trx id 2333255 lock_mode X 锁定记录但不锁定间隙 *** (2) 等待授予此锁定: RECORD LOCKS 空间 id 128954 页号 5 n 位 176 表 `db_test1`.`table_meta` 的索引 `PRIMARY` trx id 2333255 lock_mode X 锁定记录但不锁定间隙等待 *** 我们回滚交易 (2)【问题讨论】:
-
即使我也看到了相同的......急切地寻找更新......
标签: mysql deadlock database-deadlocks percona