Thread: Re: [SQL] bad select performance fixed by forbidding hash joins

Re: [SQL] bad select performance fixed by forbidding hash joins

From
Nik Putnam
Date:
I tried this out to see if it would speed up *my* query too.
The query went much faster, but gave different results!

[nputnam@spinon ~]$ setenv PGOPTIONS "-fh"
[nputnam@spinon ~]$ psql -e expression < query.sql

gives 15 rows of output in 1s.

[nputnam@spinon ~]$ unsetenv PGOPTIONS
[nputnam@spinon ~]$ psql -e expression < query.sql

gives 289 rows of output in 51s

The slow one is giving the right answer.
Why might they be different?
Anyone know where there's documentation for -fh?

I'm using postgres 6.5.2 on linux 2.2.12

Thanks,

Nik


> George Young writes:
> > Yes!  PGOPTIONS="-fh" made the query time go from 16 seconds to 2 seconds!
> > Is this a safe thing to leave on permanently, or is there some way to set
> > PGOPTIONS for just this query?
>
> I wouldn't recommend leaving it on as a long-term solution, because
> you're hobbling the system for cases where hashjoin *is* the best
> method.  AFAIK there is not a SET VARIABLE method for enabling/disabling
> plan types on-the-fly, though perhaps one should be added.
>
> The right long-term solution is to figure out why the system is
> misestimating the relative costs of the two plans, and fix the cost
> estimates.  (The system is estimating that the mergejoin is about 4x
> slower than hash; if it's really 8x faster, there is something pretty
> broken about the estimate...)
>
> I am interested in looking into this.  If your data is not proprietary,
> perhaps you would be willing to send me a database dump so that I can
> reproduce the problem exactly?  (If the dump is no more than a few
> megabytes, emailing it should be OK.)  No big hurry, since I probably
> won't be able to get to it for a week or so anyway.
>
>                         regards, tom lane
>
>
>



Re: [SQL] bad select performance fixed by forbidding hash joins

From
Tom Lane
Date:
Nik Putnam <nputnam@spinon.berkeley.edu> writes:
> I tried this out to see if it would speed up *my* query too.
> The query went much faster, but gave different results!
> [nputnam@spinon ~]$ setenv PGOPTIONS "-fh"
> [nputnam@spinon ~]$ psql -e expression < query.sql
> gives 15 rows of output in 1s.
> [nputnam@spinon ~]$ unsetenv PGOPTIONS
> [nputnam@spinon ~]$ psql -e expression < query.sql
> gives 289 rows of output in 51s
> The slow one is giving the right answer.
> Why might they be different?

That would be a bug, without question.  Can you provide a repeatable
test case?
        regards, tom lane