当我运行SHOW ENGINE INNODB STATUS\G时,我可以看到这个时间戳
------------------------
LATEST DETECTED DEADLOCK
------------------------
121118 17:14:31问题
你好,Mannoj
发布于 2012-11-19 17:36:50
您必须首先寻找的是innodb_lock_wait_timeout的设置。
假设您运行这个SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';并获得
mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50 |
+--------------------------+-------+
1 row in set (0.00 sec)
mysql>至少,您应该正确地期望每50秒在繁忙的DB服务器上检测到一个新的死锁。
InnoDB在以下两种情况下无法检测死锁:
LOCK TABLES被显式执行这两种情况通常是自己造成的,而且比较容易找到。设置innodb_lock_wait_timeout将是通常的解决办法。
然而,有一个陷阱你需要注意。是有可能SELECT创建行级锁的查询。。许多开发人员没有意识到这种奇怪的行为。事实上,根据MySQL文档:
如果由于错误而回滚单个SQL语句,则该语句设置的一些锁可能会保留下来.这是因为InnoDB以一种格式存储行锁,这样它就无法知道哪个锁是由哪个语句设置的.。
我在2011年8月8日讨论过这个问题:InnoDB死锁是否仅用于插入/更新/删除?
deadly embrace情况--lock-tables和--single-transaction混合进行mysqldumps。有了这些建议,您可以希望确保SHOW ENGINE INNODB STATUS\G中的死锁状态应该有一定程度的规律性更新。
发布于 2012-11-20 00:47:41
显示引擎INNODB状态信息持续几秒钟,通常大约一分钟。我听说没有可靠的方法来获取信息在它消失之前。每隔30秒检查一次就会做得很好。
死锁检测是“立即”的,而对事务的检测是ROLLBACKd。我的意思并不是在开始之后立即发生这种情况;相反,只要尝试了锁,就会发生这种情况,因为该锁会导致“死锁”。
lock_wait_timeout与死锁无关,而是与等待没有死锁的锁(S)的释放有关。
发布于 2015-11-05 21:30:05
您只能看到INNODB状态中的最新死锁。
您还可以使用新的5.6变量:http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_诺姆b_打印_全_死锁,这样您就可以记录所有死锁。
https://dba.stackexchange.com/questions/28897
复制相似问题