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
Views: Raw Message | Whole Thread | Download mbox | Resend email
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

Browse pgsql-jdbc by date

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