2010-04-06 14 views
7

He establecido 'max_prepared_transactions' en 20 en el postgres.config local y, sin embargo, la transacción falla con la siguiente traza de error (pero solo en Linux). Como en Windows el mismo código funciona a la perfección, estoy vagando si esto no es un problema de permiso. ¿Cuál sería la solución? Gracias PeterTransacciones preparadas con Postgres 8.4.3 en 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

También he comprobado la configuración en/proc/sys/kernel. Todos exceden los límites descritos en el manual de Postgresql 'Consumo de recursos' –

+0

¿Se puede ejecutar el comando que está causando el problema desde el indicador psql en el cuadro de Linux para quitar la capa Java y ver si funciona? – Kuberchaun

Respuesta

6

Editado para ayudar a otros que buscan la penetración en los mismos síntomas

El error indica que usted todavía está superando el límite de max_prepared_transactions.

Asegúrate de que el archivo de configuración que has editado es el que está siendo utilizado, y que le has indicado a postgresql que vuelva a cargar su configuración para recoger tu max_prepared_transactions editado.

Puede consultar la base de datos para averiguar lo que se está utilizando para que ajuste con el SQL:

SHOW max_prepared_transactions; 

respuesta original a continuación (basado en la suposición de que max_prepared_transactions se estableció correctamente):


¿Está utilizando setAutoCommit() en absoluto? Usted puede estar experimentando este error encontrado recientemente:

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

este otro post muestra algunas pequeñas pruebas repetibles de preparar las conexiones XA, que se podía echar un vistazo a ver si está haciendo algo similar:

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

+2

Gracias por repetir. He solucionado el problema. Lo que pasa es que recientemente actualicé Postgresql 8.1 a 8.4.3 para tener soporte para transacciones distribuidas. Durante ese proceso, he dejado un 'error' en el /etc/init.d/postgresql porque la aplicación todavía estaba usando la configuración de la versión anterior al inicio. En la configuración anterior 'max_prepared_transactions = 0' significa que no xtransaction con postgresql –