pg.ddx.io  pgsql-committers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Align the data block sizes of pg_dump's various compression mode
Date: Thu, 16 Oct 2025 16:54:28 +0000
Message-ID: <E1v9RFE-0020YR-2D@gemulon.postgresql.org> (raw)

Align the data block sizes of pg_dump's various compression modes.

After commit fe8192a95, compress_zstd.c tends to produce data block
sizes around 128K, and we don't really have any control over that
unless we want to overrule ZSTD_CStreamOutSize().  Which seems like
a bad idea.  But let's try to align the other compression modes to
produce block sizes roughly comparable to that, so that pg_restore's
skip-data performance isn't enormously different for different modes.

gzip compression can be brought in line simply by setting
DEFAULT_IO_BUFFER_SIZE = 128K, which this patch does.  That
increases some unrelated buffer sizes, but none of them seem
problematic for modern platforms.

lz4's idea of appropriate block size is highly nonlinear:
if we just increase DEFAULT_IO_BUFFER_SIZE then the output
blocks end up around 200K.  I found that adjusting the slop
factor in LZ4State_compression_init was a not-too-ugly way
of bringing that number roughly into line.

With compress = none you get data blocks the same sizes as the
table rows, which seems potentially problematic for narrow tables.
Introduce a layer of buffering to make that case match the others.

Comments in compress_io.h and 002_pg_dump.pl suggest that if
we increase DEFAULT_IO_BUFFER_SIZE then we need to increase the
amount of data fed through the tests in order to improve coverage.
I've not done that here, leaving it for a separate patch.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/3515357.1760128017@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/66ec01dc41243d756896777aa66df149ac8fa31d

Modified Files
--------------
src/bin/pg_dump/compress_io.h    |  4 +--
src/bin/pg_dump/compress_lz4.c   |  9 ++++--
src/bin/pg_dump/compress_none.c  | 64 ++++++++++++++++++++++++++++++++++++++--
src/tools/pgindent/typedefs.list |  1 +
4 files changed, 72 insertions(+), 6 deletions(-)



Message-ID: <E1v9RFE-0020YR-2D@gemulon.postgresql.org>
Permalink:  ../E1v9RFE-0020YR-2D@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1v9RFE-0020YR-2D@gemulon.postgresql.org

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Align the data block sizes of pg_dump's various compression mode
  In-Reply-To: <E1v9RFE-0020YR-2D@gemulon.postgresql.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox