2015-07-20 32 views
2

我在PostgreSQL中得到以下错误存在(9.2)日志,而与JPA在休眠运行的Java EE应用程序:错误:准备交易并不在PostgreSQL中

ERROR: prepared transaction with identifier "131077_AAAAAAAAAAAAAP//fwAAAd5tKPBVp1XeAAAzfmx0Y2hpZS1ub2Rl_AAAAAAAAAAAAAP//fwAAAd5tKPBVp1XeAAAzpwAAAAAAAAAA" does not exist STATEMENT: ROLLBACK PREPARED '131077_AAAAAAAAAAAAAP//fwAAAd5tKPBVp1XeAAAzfmx0Y2hpZS1ub2Rl_AAAAAAAAAAAAAP//fwAAAd5tKPBVp1XeAAAzpwAAAAAAAAAA'

我如何优化设置,以避免这个错误?这是间歇性发生的。

+2

好像在两阶段事务的JTA你/ XA处理的错误。您或框架正试图回滚一个从未准备好的或者已经回滚的xact。要确定哪些,并且了解更多关于发生的事情,请在'postgresql.conf'和/或您的应用程序框架中启用更详细的日志记录。 –

+0

我已经在应用程序中启用了详细的日志记录。我们需要在postgresql方面做些什么来获取更详细的日志,以获取这个特定的ERROR? –

+0

你不能。这是尽可能多的信息。该事务不存在,因此它已被回滚/提交或从未创建。你可以在'postgresql.conf'中配置更多的日志记录*来跟踪日志文件中的PREPARE TRANSACTION,ROLLBACK PREPARED和COMMIT PREPARED语句。你也可以检查'pg_prepared_xacts'表。 –

回答

9

原因可能是准备好的交易在默认情况下被禁用。 要启用它们,编辑postgresql.conf中并设置一个值大于0

max_prepared_transactions = 64 
+0

目前max_prepared_transactions设置为9。那好吗? –

+1

这取决于您的应用程序和用户数量。如果你仍然有这个问题,尝试增加值,看看它是否不再发生。 –