首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres保证完全死锁检测吗?

postgres保证完全死锁检测吗?
EN

Stack Overflow用户
提问于 2022-03-22 14:52:48
回答 1查看 204关注 0票数 0

我理解在等待之后,deadlock_timeout开始检测死锁,并中止事务处理。然而,我有一种情况,事务似乎正在停滞(等待一个选择.(用于更新)数小时内没有解决问题。我的日志确实显示postgres检测到了一些死锁,但我想知道是否有更复杂的死锁是postgres无法检测到的?

EN

回答 1

Stack Overflow用户

发布于 2022-03-23 04:02:28

PostgreSQL将检测所有完全在数据库中的死锁。如果它不能检测到这样的死锁,那将是一个您应该报告的错误(具有比这里显示的更好的诊断)。

但是,PostgreSQL无法检测到部分在数据库之外的死锁。在您的示例中,有另一个数据库会话持有冲突的锁,因此您的SELECT ... FOR UPDATE会一直停留到另一个会话结束其事务为止。现在,其他数据库会话的进程可能不会卡在数据库中,而是阻塞在数据库之外(或者您只是忘记关闭事务,这是一个应用程序错误)。

如果您想让会话一直在锁后面等待,请适当地设置lock_timeout。但是通常情况下,最好是通过设置idle_in_transaction_session_timeout来防止会话无限期地打开事务。但正确的解决方案是修复应用程序。

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

https://stackoverflow.com/questions/71574208

复制
相关文章

相似问题

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