Neil Conway <neilc@samurai.com> writes:
> As a quick hack, what about throwing away the constructed hash table and
> switching to hashing for sorting if we exceed sort_mem by a significant
> factor? (say, 200%) We might also want to print a warning message to the
> logs.
If I thought that a 200% error in memory usage were cause for a Chinese
fire drill, then I'd say "yeah, let's do that". The problem is that the
place where performance actually goes into the toilet is normally an
order of magnitude or two above the nominal sort_mem setting (for
obvious reasons: admins can't afford to push the envelope on sort_mem
because of the various unpredictable multiples that may apply). So
switching to a hugely more expensive implementation as soon as we exceed
some arbitrary limit is likely to be a net loss not a win.
If you can think of a spill methodology that has a gentle degradation
curve, then I'm all for that. But I doubt there are any quick-hack
improvements to be had here.
regards, tom lane