2016-09-23 54 views
2

我最近升级到mysql 5.7并观察频繁的死锁问题。是否有任何与锁定5.7相关的更改,因为我之前没有遇到过这个问题。我最近升级到mysql 5.7并观察频繁的死锁问题。是否有任何与5.7锁定有关的变化?

我有一个简单的表称为retry_records具有自动递增的id作为主键和列unique_reference作为唯一索引和两列。这个表格被用于完全多线程的环境中,其中一段代码从该表中选择n条记录,在处理失败的情况下处理数据并更新该表,并且其他段的代码从表中删除少量处理的记录,并且另一段代码段在此表中插入新记录。没有加入任何查询,没有批量插入,批量更新,除选择以外的批量删除。所有更新/删除/插入事务都有单个语句。即使那样,我正在观察插入时的死锁。 下面是日志:

------------------------ 
LATEST DETECTED DEADLOCK 
------------------------ 
2016-09-22 13:05:09 0x7f3f427e0700 
*** (1) TRANSACTION: 
TRANSACTION 39420432534, ACTIVE 0 sec inserting 
mysql tables in use 1, locked 1 
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s), undo log entries 1 
MySQL thread id 37503, OS thread handle 139917976340224, query id 1695822465 

插入查询..

*** (1) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table `database_name`.`table_name` trx id 39420432534 lock_mode X insert intention waiting 
Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
0: len 8; hex 73757072656d756d; asc supremum;; 

*** (2) TRANSACTION: 
TRANSACTION 39420432524, ACTIVE 0 sec inserting 
mysql tables in use 1, locked 1 
6 lock struct(s), heap size 1136, 5 row lock(s), undo log entries 1 
MySQL thread id 37494, OS thread handle 139909675222784, query id 1695822438 

另一个插入查询...

*** (2) HOLDS THE LOCK(S): 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table 


*** (2) WAITING FOR THIS LOCK TO BE GRANTED: 
RECORD LOCKS space id 1334 page no 1726952 n bits 312 index id of table 

Record lock, heap no 1 PHYSICAL RECORD: n_fields 1; compact format; info bits 0 
0: len 8; hex 73757072656d756d; asc supremum;; 
+0

你的头衔似乎暗示1)你最近升级到5.7,2)你以前没有遇到过这些问题。如果这些都是真的,请直接在您的问题中说明它们,以及您升级的版本。无论其他点是否为真,实际查询和“SHOW CREATE TABLE tablename”输出都不会受到影响。 –

+0

感谢Willem Renzema和Ryan Vincent的回复。我已经添加了几个与问题有关的更多细节。请帮忙。 – Rahul

回答

0

我遇到过类似的问题。自5.7开始,有一个新的参数名称innodb_deadlock_detect

此选项用于禁用死锁检测。在高并发性 系统上,当多个线程等待相同的锁时,死锁检测会导致速度变慢。有时,在发生死锁时,禁用 死锁检测并依赖innodb_lock_wait_timeout设置 进行事务回滚可能更有效。

禁用它可以提高性能并减少死锁问题。