2010-04-06 6 views
7

Я установил 'max_prepared_transactions' в 20 в local postgres.config, и все же транзакция завершилась неудачей со следующей трассировкой ошибок (но только в Linux). Поскольку в Windows тот же код работает без проблем, я блуждаю, если это не проблема разрешения. Каким будет решение? Благодаря ПитерПодготовленные транзакции с Postgres 8.4.3 на CentOS

 
372300 [Atomikos:7] WARN atomikos - XA resource 'XADBMS': rollback for XID '3137332E3230332E3132362E3139302E746D30303030313030303037:3137332E3230332E3132362E3139302E746D31' raised -3: the XA resource detected an internal error 
org.postgresql.xa.PGXAException: Error rolling back prepared transaction 
     at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:357) 
     at com.atomikos.datasource.xa.XAResourceTransaction.rollback(XAResourceTransaction.java:873) 
     at com.atomikos.icatch.imp.RollbackMessage.send(RollbackMessage.java:90) 
     at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:86) 
     at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:62) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676) 
     at java.lang.Thread.run(Thread.java:595) 
Caused by: org.postgresql.util.PSQLException: ERROR: prepared transaction with identifier "1096044365_MTczLjIwMy4xMjYuMTkwLnRtMDAwMDEwMDAwNw==_MTczLjIwMy4xMjYuMTkwLnRtMQ==" does not exist 
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) 
     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) 
     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299) 
     at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:347) 
+0

Я также проверил настройки в/proc/sys/kernel. Все они превышают лимиты, описанные в руководстве Postgresql «Потребление ресурсов». –

+0

Можете ли вы запустить свою команду, вызвавшую проблему из приглашения psql в окне linux, чтобы получить слой java, чтобы узнать, работает ли он? – Kuberchaun

ответ

6

Edited, чтобы помочь другим, кто ищет понимания на одних и тех же симптомов

Ошибка указывает на то, что вы все еще превосходит ваш max_prepared_transactions предел.

Убедитесь, что файл конфигурации, который вы отредактировали, является тем, который используется, и что вы сказали postgresql, чтобы перезагрузить его конфигурацию, чтобы получить отредактированный файл max_prepared_transactions.

Вы можете запросить базу данных, чтобы выяснить, что он использует для этого параметра с SQL:

SHOW max_prepared_transactions; 

Оригинал ответа Следит (основано на предположении, что max_prepared_transactions была установлена ​​правильно):


Вы используете setAutoCommit()? Вы можете испытывать это недавно обнаружили ошибку:

http://archives.postgresql.org/pgsql-jdbc/2010-03/msg00013.php

Этот другой пост показывает некоторые небольшие повторяемые тесты подготовки XA соединений, которые вы могли бы взглянуть на то, чтобы увидеть, если вы делаете что-нибудь подобное:

http://archives.postgresql.org/pgsql-jdbc/2009-01/msg00025.php

+2

Спасибо за повтор. Я исправил проблему. Дело в том, что я недавно обновился от Postgresql 8.1 до 8.4.3, чтобы иметь поддержку распределенной транзакции. Во время этого процесса я оставил «глюк» в файле /etc/init.d/postgresql тем, что приложение все еще использовало конфигурацию из старой версии при запуске. В старой конфигурации «max_prepared_transactions = 0» означает отсутствие xtransaction с postgresql –