什么是适当的Hibernate会话超时值,以避免死锁?

时间:2014-02-10 19:33:18

标签: java hibernate postgresql timeout deadlock

我们的Postgresql应用程序出现Hibernate错误:org.hibernate.util.JDBCExceptionReporter - 错误:检测到死锁。建议处理此问题的方法之一是设置事务超时 (Hibernate参考文档):

sess.getTransaction().setTimeout(3)

如何定义3秒的这个值?

1 个答案:

答案 0 :(得分:0)

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

如果您遇到困难,您可以手动重新创建死锁,并查看pg_locks以获取有关正在发生的事情的其他信息;见the lock monitoring wiki article

如果死锁检测超时太长,请降低PostgreSQL的死锁检测超时,不要在应用程序中添加语句超时黑客。请参阅the documentation on lock management