| From: | Michael Paquier <michael(at)paquier(dot)xyz> |
|---|---|
| To: | pgsql-committers(at)lists(dot)postgresql(dot)org |
| Subject: | pgsql: Reuse the zstd context when compressing WAL full-page images |
| Date: | 2026-10-14 07:41:23 |
| Message-ID: | E1xGtc3-00000001YwU-3kPn@gemulon.postgresql.org |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-committers |
Reuse the zstd context when compressing WAL full-page images
When wal_compression=zstd, the compression of a full page image involves
ZSTD_compress(), that creates and destroys a zstd compression context
for each page processed.
Tests with FPI-heavy workloads have proven that this can be costly, and
a compression context can be reused across multiple pages. This commit
switches to use ZSTD_compressCCtx() for the compression of each page,
with ZSTD_CCtx allocated once in each backend, allocation happening the
first time it is required. If the allocation fails, the code
temporarily fails back to no compression, as a soft failure mode while
being inside a critical section.
Some tests have proved that this simple change can lead to a substantial
performance gain. For example, I have measured up to 6% faster runtime
and 8% less user CPU time for a VACUUM FULL generating WAL made mostly
of zstd-compressed FPIs.
ce3387b74b70 has done something similar for the decompression of pages
at replay.
Author: Andrey Borodin <x4mmm(at)yandex-team(dot)ru>
Reviewed-by: Anthonin Bonnefoy <anthonin(dot)bonnefoy(at)datadoghq(dot)com>
Reviewed-by: Michael Paquier <michael(at)paquier(dot)xyz>
Discussion: https://www.postgresql.org/message-id/asRsOl73nf8GeBFd@paquier.xyz
Branch
------
master
Details
-------
https://git.postgresql.org/pg/commitdiff/857340b0263da6d6a5f764bbab2fb39d0456f9fd
Modified Files
--------------
src/backend/access/transam/xloginsert.c | 22 ++++++++++++++++++++--
1 file changed, 20 insertions(+), 2 deletions(-)
| From | Date | Subject | |
|---|---|---|---|
| Next Message | David Rowley | 2026-10-14 09:07:15 | pgsql: Accumulate Memoize parallel worker stats across rescans |
| Previous Message | Michael Paquier | 2026-10-14 06:14:55 | pgsql: Fix typo in xlogreader.c |