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

Re: executeQuery Locked

From: Mark Lewis <mark(dot)lewis(at)mir3(dot)com>
To: Lucas Sousa <lucas75(at)gmail(dot)com>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: executeQuery Locked
Date: 2006-07-11 18:27:11
Message-ID: 1152642431.30994.391.camel@archimedes (view raw or flat)
Thread:
Lists: pgsql-jdbc
Please remember to CC the list on any emails.  This one is beyond my
skill, so hopefully somebody else can help you out.

-- Mark Lewis

On Tue, 2006-07-11 at 15:23 -0300, Lucas Sousa wrote:
> I think that has something to do with the PhantomReferences
> 
> The problem seem to be related with the garbage collector... 
> 
> My application force the garbage collector to run periodically. I
> stopped that for testing purposes and that locking problem does not
> happened for the last hour and a half. 
> 
> 
> 
> On 7/11/06, Lucas Sousa <lucas75(at)gmail(dot)com> wrote:
>         autocommit is off
>         
>         the query is a plain "select 1 from tb_1 where a=b and b=c and
>         c=d"
>         
>         where a=b and b=c and c=d is the primary key of the table 
>         it should not last more than millisseconds (in fact doesn't)
>         but sometimes one of the threads that is executing that sql
>         seems to stop rigth there waiting for the result. That is why
>         I set the queryTimeout for 120 seconds, but seems that the
>         query timeout is not working at all.
>         
>         
>          
>         On 7/11/06, Mark Lewis <mark(dot)lewis(at)mir3(dot)com> wrote:
>                 It could possibly be a bug in the driver, but much
>                 more likely it's just
>                 the server waiting on some normal condition.
>                 
>                 What exactly is the query in question?  Are you
>                 running with autocommit
>                 on or off?
>                 
>                 -- Mark Lewis
>                 
>                 On Tue, 2006-07-11 at 13:29 -0300, Lucas Sousa wrote:
>                 > People, I am having a very anoying problem:
>                 >
>                 > I am issuing this:
>                 >
>                 >         boolean result = false;
>                 >         Statement stm = null; 
>                 >         ResultSet rs = null;
>                 >         try
>                 >         {
>                 >             stm = conn.createStatement
>                 ( ResultSet.TYPE_FORWARD_ONLY,
>                 > ResultSet.CONCUR_READ_ONLY );
>                 >             stm.setQueryTimeout ( timeout );
>                 >             rs = stm.executeQuery( sql );  <- the
>                 proccess is stopped
>                 > here for more than half an hour
>                 >             result = rs.next();
>                 >         }
>                 >         finally
>                 >         { 
>                 >             DbUtils.closeQuietly( rs );
>                 >             DbUtils.closeQuietly( stm );
>                 >         }
>                 >         return result;
>                 >
>                 >
>                 > sql is a simple select that returns one row (if I
>                 take it and send to 
>                 > pgsql it works fine)
>                 > timeout = 120 (seconds) / I am using a DBCP pool / I
>                 use one or more
>                 > connection per thread (I get it inside the method
>                 and release inside
>                 > the method)
>                 >
>                 > If I get my debbuger and interrupt the thread I see
>                 it stopped in some 
>                 > point of execution of stm.executeQuery (it seems to
>                 be waitng a
>                 > response from the postgres server) but at the same
>                 time I go to the
>                 > server and does not find the query itself runnning.
>                 >
>                 > It seems to me that for some (weird) reason, the
>                 query timeout is bein 
>                 > achieved without throwing any error or the
>                 postgresql driver detecting
>                 > that.
>                 >
>                 > This is some know issue?
>                 > It is possible that the backend is cancelling the
>                 connection by
>                 > timeout and the driver does not notice and continues
>                 waiting for it? 
>                 >
>                 > the driver I am using is
>                 postgresql-8.2dev-503.jdbc3.jar (and it
>                 > happens the same thing with the 8.0 driver)
>                 >
>                 > and the stack trace of one of such locked proccess:
>                 >
>                 > Thread [zzzzzzz:12] (Suspended) 
>                 >     SocketInputStream.socketRead0(FileDescriptor,
>                 byte[], int, int,
>                 > int) line: not available [native method]
>                 >     SocketInputStream.read(byte[], int, int) line:
>                 not available
>                 >     BufferedInputStream.fill () line: not available
>                 >     BufferedInputStream.read() line: not available
>                 >     PGStream.ReceiveChar() line: 256
>                 >     QueryExecutorImpl.processResults(ResultHandler,
>                 int) line: 1164
>                 >     QueryExecutorImpl.execute (Query, ParameterList,
>                 ResultHandler,
>                 > int, int, int) line: 190
>                 >     Jdbc3Statement(AbstractJdbc2Statement).execute
>                 (Query,
>                 > ParameterList, int) line: 452
>                 >     Jdbc3Statement
>                 (AbstractJdbc2Statement).executeWithFlags(String, 
>                 > int) line: 340
>                 >     Jdbc3Statement
>                 (AbstractJdbc2Statement).executeQuery(String) line:
>                 > 239
>                 >     DelegatingStatement.executeQuery(String) line:
>                 205
>                 >     xxxx() line: 580 <- this is the line in the code
>                 I sent. 
>                 >     xxxx(int) line: 504
>                 >     xxxx(int) line: 523
>                 >     xxxx() line: 156
>                 >     NativeMethodAccessorImpl.invoke0(Method, Object,
>                 Object[]) line:
>                 > not available [native method]
>                 >     NativeMethodAccessorImpl.invoke(Object, Object
>                 []) line: not
>                 > available
>                 >     DelegatingMethodAccessorImpl.invoke (Object,
>                 Object[]) line: not
>                 > available
>                 >     Method.invoke(Object, Object...) line: not
>                 available 
>                 >     ScheduleTaskRunner.run() line: 139
>                 >     Thread.run() line: not available
>                 >
>                 > Has anyone seen this kind of situation before?
>                 >
>                 >
>         
>         
> 

In response to

pgsql-jdbc by date

Next:From: Albert CardonaDate: 2006-07-11 18:27:42
Subject: how to monitor the amount of bytes fetched in a executeQuery() ?
Previous:From: Albert CardonaDate: 2006-07-11 18:02:18
Subject: subscribe

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