我们的Postgresql应用程序出现Hibernate错误:org.hibernate.util.JDBCExceptionReporter - 错误:检测到死锁。建议处理此问题的方法之一是设置事务超时 (Hibernate参考文档):
sess.getTransaction().setTimeout(3)
如何定义3秒的这个值?
答案 0 :(得分:0)
如果您的查询是死锁,请查看它们为什么会死锁并修复它。 PostgreSQL服务器错误日志中的错误消息告诉您有关死锁的事务。如果还不够,请设置log_statement = 'all'
,添加log_line_prefix
以识别事务或使用csv日志记录,并分析日志文件以查看发生的情况。
如果您遇到困难,您可以手动重新创建死锁,并查看pg_locks
以获取有关正在发生的事情的其他信息;见the lock monitoring wiki article。
如果死锁检测超时太长,请降低PostgreSQL的死锁检测超时,不要在应用程序中添加语句超时黑客。请参阅the documentation on lock management。