什么是正确的休眠会话超时值以避免死锁



我们的Postgresql应用程序正在获得Hibernate错误:org.hibernate.util.JDBCExceptionReporter - 错误:检测到死锁。 解决此问题的建议方法之一是设置事务超时(休眠参考文档):

sess.getTransaction().setTimeout(3)

如何定义 3 秒的值?

如果您的查询死锁,请查看它们死锁的原因并修复它。PostgreSQL 服务器错误日志中的错误消息告诉您有关死锁的事务。如果仅此还不够,请设置log_statement = 'all',添加log_line_prefix来标识事务或使用 csv 日志记录,并分析日志文件以查看发生了什么。

如果您遇到困难,可以手动重新创建死锁并查看pg_locks以获取有关正在发生的事情的其他信息;请参阅锁监控 wiki 文章。

如果死锁检测超时对你来说太长,降低 PostgreSQL 的死锁检测超时,不要在应用程序中添加语句超时技巧。请参阅有关锁定管理的文档。

最新更新