Skip site navigation (1) Skip section navigation (2)

Re: Locking on PGStream.ReceiveChar(PGStream.java:256)

From: Mark Lewis <mark(dot)lewis(at)mir3(dot)com>
To: Marcin Waldowski <M(dot)Waldowski(at)sulechow(dot)net>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Locking on PGStream.ReceiveChar(PGStream.java:256)
Date: 2006-12-01 16:08:56
Message-ID: 1164989336.9734.19.camel@archimedes (view raw or flat)
Thread:
Lists: 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

In response to

Responses

pgsql-jdbc by date

Next:From: matrixxDate: 2006-12-01 18:23:53
Subject: Re: release for 8.2
Previous:From: Dave CramerDate: 2006-12-01 15:45:21
Subject: Re: Backup with Java

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group