• Tom Lane's avatar
    Improve memory management code to avoid inefficient behavior when a context · c22dea89
    Tom Lane authored
    has a small maxBlockSize: the maximum request size that we will treat as a
    "chunk" needs to be limited to fit in maxBlockSize.  Otherwise we will round
    up the request size to the next power of 2, wasting space, which is a bit
    pointless if we aren't going to make the blocks big enough to fit additional
    stuff in them.  The example motivating this is local buffer management, which
    makes repeated allocations of 8K (one BLCKSZ buffer) in TopMemoryContext,
    which has maxBlockSize = 8K because for the most part allocations there are
    small.  This leads to each local buffer actually eating 16K of space, which
    adds up when there are thousands of them.  I intend to change localbuf.c to
    aggregate its requests, which will prevent this particular misbehavior, but
    it seems likely that similar scenarios could arise elsewhere, so fixing the
    core problem seems wise as well.
    c22dea89
aset.c 33.7 KB