2010-04-06 26 views
7

Tôi đã đặt 'max_prepared_transactions' thành 20 trong postgres.config cục bộ và giao dịch không thành công với dấu vết lỗi sau (nhưng chỉ trên Linux). Kể từ trong Windows cùng một mã hoạt động liền mạch tôi đang lang thang nếu đây không phải là một vấn đề của sự cho phép. Điều gì sẽ là giải pháp? Cảm ơn PeterGiao dịch đã chuẩn bị với Postgres 8.4.3 trên 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

Tôi cũng đã kiểm tra cài đặt tại/proc/sys/kernel. Tất cả chúng đều vượt quá giới hạn được mô tả tại hướng dẫn sử dụng tài nguyên Postgresql 'Resource Consumption' –

+0

Bạn có thể chạy lệnh gây ra vấn đề từ lời nhắc psql trên hộp linux để đưa lớp java ra khỏi đường để xem nó có hoạt động không? – Kuberchaun

Trả lời

6

Edited để giúp khác, những người tìm kiếm cái nhìn sâu sắc về các triệu chứng tương tự

Các lỗi chỉ ra rằng bạn vẫn đang vượt max_prepared_transactions giới hạn của bạn.

Đảm bảo rằng tệp cấu hình bạn đã chỉnh sửa là tệp đang được sử dụng và bạn đã yêu cầu postgresql tải lại cấu hình của nó để chọn max_prepared_transactions đã chỉnh sửa của bạn.

Bạn có thể truy vấn cơ sở dữ liệu để tìm hiểu những gì nó được sử dụng cho rằng thiết lập với SQL:

SHOW max_prepared_transactions; 

gốc trả lời Làm theo (dựa trên giả định rằng max_prepared_transactions đã được thiết lập một cách chính xác):


Bạn có đang sử dụng setAutoCommit() không? Bạn có thể gặp này lỗi thời gian gần đây được tìm thấy:

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

bài khác Điều này cho thấy một số xét nghiệm lặp lại nhỏ chuẩn bị kết nối XA, mà bạn có thể có một cái nhìn tại để xem nếu bạn đang làm bất cứ điều gì tương tự:

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

+2

Cảm ơn bạn đã phát lại. Tôi đã khắc phục sự cố. Vấn đề là tôi mới nâng cấp từ Postgresql 8.1 lên 8.4.3 để hỗ trợ cho giao dịch phân tán. Trong quá trình đó, tôi đã để lại một 'trục trặc' trong /etc/init.d/postgresql trong đó ứng dụng vẫn đang sử dụng cấu hình từ phiên bản cũ lúc bắt đầu. Trong cấu hình cũ 'max_prepared_transactions = 0' có nghĩa là không có xtransaction với postgresql –