]> granicus.if.org Git - postgresql/commit
Improve memory management code to avoid inefficient behavior when a context
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 27 Dec 2006 22:30:48 +0000 (22:30 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 27 Dec 2006 22:30:48 +0000 (22:30 +0000)
commitc22dea89004b99af099cb31139f8aeb5bcb8840d
treed0e4507c7ba5df72800b9979f6b9d31301696fab
parent6bb7b467c0572e4baafca5eb491aab2739e44378
Improve memory management code to avoid inefficient behavior when a context
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.
src/backend/utils/mmgr/aset.c