mysql死锁后,究竟是等待超时,还是直接报错回滚,或者在不同情况下不同表现?

发布于 2022-09-11 17:33:27 字数 244 浏览 11 评论 0

我看到有些文章说,针对死锁问题,要设置合理的死锁超时时间。但是有的又说InnoDB将自动检测事务死锁,并立刻回滚,返回错误。

我试了一下,发现是“InnoDB将自动检测事务死锁,并立刻回滚,返回错误。”更符合实验结果。

所以mysql死锁后,究竟是等待超时,还是直接报错回滚,或者在不同情况下不同表现?

如果“InnoDB将自动检测事务死锁,并立刻回滚,返回错误。” 是正确状况,那很多文章说的”死锁等待超时时间”是个什么概念?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜夜流光相皎洁 2022-09-18 17:33:27

查询全局等待事务锁超时时间

SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout';

设置全局等待事务锁超时时间

SET GLOBAL innodb_lock_wait_timeout=100;

查询当前会话等待事务锁超时时间

SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';

杀お生予夺 2022-09-18 17:33:27

我认为死锁并不是能够百分百检查出来的一种问题,所以能够检查出来的死锁肯定是立即报错了,傻乎乎等着超时不是很傻吗?

那如果是不能检查出来的死锁,设置超时机制就是有必要的了。

与风相奔跑 2022-09-18 17:33:27

死锁超时时间应该指的是锁等待时间,参数为innodb_lock_wait_timeout

这两个处理方法对应的是不同的情况

死锁检测: 默认开启,InnoDB 在加锁的时候会检测加锁后是否会造成死锁,如果会就回滚代价最小的那一个事务

锁等待超时时间: 一是为了处理检测不出来的那种死锁,二是避免等待正常锁(非死锁,可能是大事务)时间过长

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文