]> granicus.if.org Git - postgresql/commit
Add some randomness to the choice of which GiST page to insert to.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 25 Jan 2013 14:49:13 +0000 (16:49 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 25 Jan 2013 14:58:38 +0000 (16:58 +0200)
commitba1cc6501e98aee7d43098b032d6656f243bca5b
tree1bafdc07c3bf1aa4cd59867c244c46c23d5183a2
parentbe926474be57ae73ae2052b968fd785a0096514e
Add some randomness to the choice of which GiST page to insert to.

When descending the tree for an insert, and there are multiple equally good
pages we could insert to, make the choice in random. Previously, we would
always choose the tuple with lowest offset number. That meant that when two
non-leaf pages overlap - in the extreme case they might have exactly the same
key - all but the first such page went unused. That wasn't optimal for space
usage; if you deleted some tuples from the non-first pages, the space would
never be reused.

With this patch, the other pages are sometimes chosen too, although there's
still a heavy bias towards low-offset tuples, so that we don't lose cache
locality when doing a lot of inserts with similar keys.

Original idea by Alexander Korotkov, although this patch version was written
by me and copy-edited by Tom Lane.
src/backend/access/gist/gistutil.c