Re: Locking on PGStream.ReceiveChar(PGStream.java:256) - Mailing list pgsql-jdbc
From | Mark Lewis |
---|---|
Subject | Re: Locking on PGStream.ReceiveChar(PGStream.java:256) |
Date | |
Msg-id | 1164989336.9734.19.camel@archimedes Whole thread Raw |
In response to | Locking on PGStream.ReceiveChar(PGStream.java:256) (Marcin Waldowski <M.Waldowski@sulechow.net>) |
Responses |
Re: Locking on PGStream.ReceiveChar(PGStream.java:256)
|
List | pgsql-jdbc |
You may want to confirm that no more than one thread is using a Connection (or a statement/resultset off of that connection) at the same time. A couple of folks on this list have reported similar stalls that were resolved by single-threading access to each Connection. -- Mark On Fri, 2006-12-01 at 14:16 +0100, Marcin Waldowski wrote: > 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 > > ---------------------------(end of broadcast)--------------------------- > TIP 3: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faq
pgsql-jdbc by date: