首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用InnoDB死锁检测

禁用InnoDB死锁检测
EN

Database Administration用户
提问于 2017-09-20 10:20:19
回答 2查看 5.5K关注 0票数 2

我想禁用InnoDB死锁检测和自动回滚,这符合我们希望依赖innodb_lock_wait_timeout的要求(因为并发性很重)。

当启用innodb_deadlock_detect (默认)时,锁等待超时值不适用于死锁,因为InnoDB会立即检测死锁并回滚一个死锁事务。禁用innodb_deadlock_detect时,InnoDB依赖于innodb_lock_wait_timeout进行事务回滚...

如何在MySQL 5.7.13中实现上述目标?我找不到任何变量innodb_deadlock_detect

EN

回答 2

Database Administration用户

发布于 2018-03-30 15:31:53

是的,你能做到的。确保innodb_lock_wait_timeout保持在较低的水平,例如,2秒。持续2秒的死锁是完全无害的,如果它们是罕见的(通常是非常罕见的)。提醒开发人员避免长事务,并避免外键ON ... CASCADE (因为他们传播锁,使死锁更有可能)。

当然,我假设您可以为这些超时保留一个非常低的值。但你能吗?我不知道您的工作负载,但是,例如,一条语句可能每小时锁定一些行10秒。在这种情况下,您能负担得起低超时时间吗?如果没有,那么我上面写的所有东西都不适用于你。

票数 1
EN

Database Administration用户

发布于 2017-09-20 14:59:39

即使这是可能的,也可能是不明智的。

每次出现潜在的死锁时,您都会将其转换为占用某些资源50秒的连接。使用“重并发”,这可能会导致“连接不足”。在这一点上,没有人能做任何事情。

相反,让我们讨论一种常见的事务,这些事务有时会死锁。(您可能可以通过SHOW ENGINE=INNODB STATUS;捕捉到一个。)这可能是降低死锁频率和/或加快事务速度的简单方法。或者可能将多个事务合并为一个,从而减少开销。

同时,我想这就是你所指的?

- 2016-09-12 8.0.0发展里程碑& 2016-09-06 5.7.15通用可用性-添加或更改的功能- InnoDB -一个新的动态配置选项诺姆b_死锁_检出,可用于禁用死锁检测。在高并发性系统上,当多个线程等待同一锁时,死锁检测会导致减速。有时,当死锁发生时,禁用死锁检测并依赖诺姆b_锁定_等_超时设置进行事务回滚可能更有效。(Bug #23477773)

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/186407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档