Locking on PGStream.ReceiveChar(PGStream.java:256)
От | Marcin Waldowski |
---|---|
Тема | Locking on PGStream.ReceiveChar(PGStream.java:256) |
Дата | |
Msg-id | 45702B1A.4030401@sulechow.net обсуждение исходный текст |
Ответы |
Re: Locking on PGStream.ReceiveChar(PGStream.java:256)
Re: Locking on PGStream.ReceiveChar(PGStream.java:256) |
Список | pgsql-jdbc |
Hello. JDBC version: 8.1-407 JDBC 3 <http://jdbc.postgresql.org/download/postgresql-8.1-407.jdbc3.jar> PostgreSQL version: 8.1.5-1 for Windows Database encoding: UTF8 I observed a lock at at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:256) Thread dump: "Thread-1" prio=6 tid=0x02ea9008 nid=0x638 runnable [0x0388f000..0x0388f9e8] at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(Unknown Source) at java.io.BufferedInputStream.fill(Unknown Source) at java.io.BufferedInputStream.read(Unknown Source) - locked <0x10bc1d48> (a java.io.BufferedInputStream) at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:256) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1163) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:188) - locked <0x10bc1d98> (a org.postgresql.core.v3.QueryExecutorImpl) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:452) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:340) at org.postgresql.jdbc2.AbstractJdbc2Connection.execSQLUpdate(AbstractJdbc2Connection.java:217) at org.postgresql.jdbc2.AbstractJdbc2Connection.setTransactionIsolation(AbstractJdbc2Connection.java:737) It looks like it wait forever for next char from database (but it never comes) at jdbc driver code: public int ReceiveChar() throws IOException { int c = pg_input.read(); if (c < 0) throw new EOFException(); return c; } It happens after about hour of our perfomance test (high workload - 50 threads are executing various short operations on database) In our aplication it lock at following code: connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); which is executed after taking connection from pool. It is possible that this code is executing serveral times for the same connection. What can I do to avoid this problem? Regards Marcin Waldowski
В списке pgsql-jdbc по дате отправления: