Thread: does prepareThreshold work? forced to use old driver

does prepareThreshold work? forced to use old driver

From
Gene
Date:
hi!

I've been having some serious performance issues with
postgresql8.2/hibernate/jdbc due to postgres reusing bad cached query
plans. It doesn't look at the parameter values and therefore does not
use any partial indexes.

After trying to set prepareThreshold=0 in the connection string which
didnt work, even modifying the jdbc driver and forcing it to 0 and not
working I realized that it must be being ignored. After giving up
pretty much I tried a much older driver which doesn't use server
prepared statements at all the problem has gone away and it is once
again using the partial indexes. How can I get this to work properly
on the new jdbc driver? I don't really like having to use a 2 year old
driver to get good performance as you can imagine :)

Could someone point me to a jdbc src file where I could just disable
server-side prepared statements entirely?

--
thanks, G

Re: does prepareThreshold work? forced to use old driver

From
Kris Jurka
Date:

On Mon, 26 Feb 2007, Gene wrote:

> I've been having some serious performance issues with
> postgresql8.2/hibernate/jdbc due to postgres reusing bad cached query
> plans. It doesn't look at the parameter values and therefore does not
> use any partial indexes.
>
> After trying to set prepareThreshold=0 in the connection string which
> didnt work, even modifying the jdbc driver and forcing it to 0 and not
> working I realized that it must be being ignored. After giving up
> pretty much I tried a much older driver which doesn't use server
> prepared statements at all the problem has gone away and it is once
> again using the partial indexes. How can I get this to work properly
> on the new jdbc driver? I don't really like having to use a 2 year old
> driver to get good performance as you can imagine :)

Something must be going wrong in the setting to zero or your code may be
setting it to non-zero at some later point.  I believe prepareThreshold=0
should work.  Do you have a test case showing it doesn't?

Kris Jurka


Re: does prepareThreshold work? forced to use old driver

From
Dave Cramer
Date:
On 26-Feb-07, at 11:12 AM, Gene wrote:

> hi!
>
> I've been having some serious performance issues with
> postgresql8.2/hibernate/jdbc due to postgres reusing bad cached query
> plans. It doesn't look at the parameter values and therefore does not
> use any partial indexes.
>
> After trying to set prepareThreshold=0 in the connection string which
> didnt work, even modifying the jdbc driver and forcing it to 0 and not
> working I realized that it must be being ignored. After giving up
> pretty much I tried a much older driver which doesn't use server
> prepared statements at all the problem has gone away and it is once
> again using the partial indexes. How can I get this to work properly
> on the new jdbc driver? I don't really like having to use a 2 year old
> driver to get good performance as you can imagine :)
>
> Could someone point me to a jdbc src file where I could just disable
> server-side prepared statements entirely?
>
you can just add protocolVersion=2 to the url and it will not use
prepared statements.

setting prepareThreshold=0 just tells it not to use named statements.
It will still use statements but won't cache them.

Are you sure the problem is with cached statements ? There are issues
where prepared statements won't use the index if you don't use the
correct type.

Dave
> --
> thanks, G
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 3: Have you checked our extensive FAQ?
>
>               http://www.postgresql.org/docs/faq
>


Re: does prepareThreshold work? forced to use old driver

From
Gene
Date:
Thank you! setting the protocolVersion=2 works with the newer driver.
I'm still puzzled as to why the prepareThreshold=0 doesn't force the
replan though.

On 2/26/07, Dave Cramer <pg@fastcrypt.com> wrote:
>
> On 26-Feb-07, at 11:12 AM, Gene wrote:
>
> > hi!
> >
> > I've been having some serious performance issues with
> > postgresql8.2/hibernate/jdbc due to postgres reusing bad cached query
> > plans. It doesn't look at the parameter values and therefore does not
> > use any partial indexes.
> >
> > After trying to set prepareThreshold=0 in the connection string which
> > didnt work, even modifying the jdbc driver and forcing it to 0 and not
> > working I realized that it must be being ignored. After giving up
> > pretty much I tried a much older driver which doesn't use server
> > prepared statements at all the problem has gone away and it is once
> > again using the partial indexes. How can I get this to work properly
> > on the new jdbc driver? I don't really like having to use a 2 year old
> > driver to get good performance as you can imagine :)
> >
> > Could someone point me to a jdbc src file where I could just disable
> > server-side prepared statements entirely?
> >
> you can just add protocolVersion=2 to the url and it will not use
> prepared statements.
>
> setting prepareThreshold=0 just tells it not to use named statements.
> It will still use statements but won't cache them.
>
> Are you sure the problem is with cached statements ? There are issues
> where prepared statements won't use the index if you don't use the
> correct type.
>
> Dave
> > --
> > thanks, G
> >
> > ---------------------------(end of
> > broadcast)---------------------------
> > TIP 3: Have you checked our extensive FAQ?
> >
> >               http://www.postgresql.org/docs/faq
> >
>
>


--
Gene Hart
cell: 443-604-2679