]> granicus.if.org Git - postgresql/commit
Optimize pglz compressor for small inputs.
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 1 Jul 2013 08:00:14 +0000 (11:00 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Mon, 1 Jul 2013 08:00:14 +0000 (11:00 +0300)
commit031cc55bbea6b3a6b67c700498a78fb1d4399476
treebcda4527e18de721e3a7640a70d7583e504483d4
parent79ce29c734c6a652b2f7193bda537cff0c8eb8c1
Optimize pglz compressor for small inputs.

The pglz compressor has a significant startup cost, because it has to
initialize to zeros the history-tracking hash table. On a 64-bit system, the
hash table was 64kB in size. While clearing memory is pretty fast, for very
short inputs the relative cost of that was quite large.

This patch alleviates that in two ways. First, instead of storing pointers
in the hash table, store 16-bit indexes into the hist_entries array. That
slashes the size of the hash table to 1/2 or 1/4 of the original, depending
on the pointer width. Secondly, adjust the size of the hash table based on
input size. For very small inputs, you don't need a large hash table to
avoid collisions.

Review by Amit Kapila.
src/backend/utils/adt/pg_lzcompress.c