]> granicus.if.org Git - postgresql/commit
Pack tuples in a hash join batch densely, to save memory.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 10 Sep 2014 18:24:52 +0000 (21:24 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Wed, 10 Sep 2014 18:24:52 +0000 (21:24 +0300)
commit45f6240a8fa9d35548eb2ef23dba2c11540aa02a
tree3c15869f843b90762a673d2af9fb5a7849fbb609
parent311da16439ef69fc2054af3f4377fd4acd29a0e3
Pack tuples in a hash join batch densely, to save memory.

Instead of palloc'ing each HashJoinTuple individually, allocate 32kB chunks
and pack the tuples densely in the chunks. This avoids the AllocChunk
header overhead, and the space wasted by standard allocator's habit of
rounding sizes up to the nearest power of two.

This doesn't contain any planner changes, because the planner's estimate of
memory usage ignores the palloc overhead. Now that the overhead is smaller,
the planner's estimates are in fact more accurate.

Tomas Vondra, reviewed by Robert Haas.
src/backend/executor/nodeHash.c
src/include/executor/hashjoin.h