我们有一个连接到Postgres数据库的Java应用程序。有时,Java应用程序会耗尽内存并死掉,因为它正在等待对从未返回的数据库发送的事务的响应。
我在问题发生的时间段内以1分钟的间隔启用了pg_locks和事务的日志记录。我发现导致问题的事务,但它似乎挂起了。
它在一个不超过10条记录的表上做了一个简单的更新语句,但它在事务中处于几个小时。 pg_locks视图中没有任何内容表明此事务正在等待锁定,但我不知道它为什么会挂起。一旦我们终止Java应用程序并重新启动它,该事务就会清除,业务将继续正常进行。问题是,什么可能导致此交易被挂起?