Tom Lane wrote:
> For some reason I hadn't immediately twigged to the fact that your test
> script is just N repetitions of the exact same structure with random data.
> So it's not so surprising that you get random variations in behavior
> with different test data sets.
>
> It seems clear that our qsort.c is doing a pretty awful job of picking
> qsort pivots, while glibc is mostly managing not to make that mistake.
> I haven't looked at the glibc code yet to see what they are doing
> differently.
>
> I'd say this puts a considerable damper on my enthusiasm for using our
> qsort all the time, as was recently debated in this thread:
> http://archives.postgresql.org/pgsql-hackers/2005-12/msg00610.php
> We need to fix our qsort.c before pushing ahead with that idea.
[snip]
> Time: 28314.182 ms
> Time: 29400.278 ms
> Time: 34142.534 ms
Ouch! That confirms my problem. I generated the random test case because
it was easier than including the dump of my tables, but you can
appreciate that tables 20 times the size are basically crippled when it
comes to creating an index on them.
Examining the dump and the associated times during restore it looks like
I have 7 tables with this approximate distribution, thus the
ridiculously long restore time. Better not re-index soon!
Is this likely to hit me in a random fashion during normal operation,
joins, sorts, order by for example?
So the options are:
1) Fix the included qsort.c code and use that
2) Get FreeBSD to fix their qsort code
3) Both
I guess that 1 is the real solution in case anyone else's qsort is
broken in the same way. Then at least you *could* use it all the time :)
Regards,
Gary.