• Tom Lane's avatar
    Improve memory space management in tuplesort and tuplestore. · 8ae35e91
    Tom Lane authored
    The code originally just doubled the size of the tuple-pointer array so
    long as that would fit in allowedMem.  This could result in failing to use
    as much as half of allowedMem, if (as is typical) the last doubling attempt
    didn't quite fit.  Worse, we might double the array size but be unable to
    use most of the added slots, because there was no room left within the
    allowedMem limit for tuples the slots should point to.  To fix, double only
    so long as we've used less than half of allowedMem in total.  Then do one
    more array enlargement, but scale it based on total memory consumption so
    far.  This will work nicely as long as the average tuple size is reasonably
    stable, and in any case should be better than the old method.
    
    This change will result in large sort operations consuming a larger
    fraction of work_mem than they typically did in the past.  The release
    notes should mention that users may want to revisit their work_mem
    settings, if they'd tuned those settings based on the old behavior of
    sorting.
    
    Jeff Janes, reviewed by Peter Geoghegan and Robert Haas
    8ae35e91
tuplesort.c 104 KB