postgresql/src/include
Tomas Vondra 10e3226ba1 Align blocks in incremental backups to BLCKSZ
Align blocks stored in incremental files to BLCKSZ, so that the
incremental backups work well with CoW filesystems.

The header of the incremental file is padded with \0 to a multiple of
BLCKSZ, so that the block data (also BLCKSZ) is aligned to BLCKSZ. The
padding is added only to files containing block data, so files with just
the header remain small. This adds a bit of extra space, but as the
number of blocks increases the overhead gets negligible very quickly.
And as the padding is \0 bytes, it does compress extremely well.

The alignment is important for CoW filesystems that usually require the
blocks to be aligned to filesystem page size for features like block
sharing, deduplication etc. to work well. With the variable sized header
the blocks in the increments were not aligned at all, negating the
benefits of the CoW filesystems.

This matters even for non-CoW filesystems, for example when placed on a
RAID array. If the block is not aligned, it may easily span multiple
devices, causing read and write amplification.

It might be better to align the blocks to the filesystem page, not
BLCKSZ, but we have no good way to determine that. Even if we determine
the page size at the time of taking the backup, the backup may move. For
now the BLCKSZ seems sufficient - the filesystem page is usually 4K, so
the default BLCKSZ (8K by default) is aligned to that.

Author: Tomas Vondra
Reviewed-by: Robert Haas, Jakub Wartak
Discussion: https://postgr.es/m/3024283a-7491-4240-80d0-421575f6bb23%40enterprisedb.com
2024-04-05 16:30:01 +02:00
..
access Preliminary refactor of heap scanning functions 2024-04-04 16:41:13 +13:00
archive Add macro for customizing an archiving WARNING message. 2024-03-04 15:41:42 -06:00
backup Align blocks in incremental backups to BLCKSZ 2024-04-05 16:30:01 +02:00
bootstrap Update copyright for 2024 2024-01-03 20:49:05 -05:00
catalog Implement pg_wal_replay_wait() stored procedure 2024-04-02 22:48:03 +03:00
commands Invent SERIALIZE option for EXPLAIN. 2024-04-03 17:41:57 -04:00
common Add support for incrementally parsing backup manifests 2024-04-04 06:46:40 -04:00
datatype Update copyright for 2024 2024-01-03 20:49:05 -05:00
executor Add TupleTableSlotOps.is_current_xact_tuple() method 2024-03-21 23:00:43 +02:00
fe_utils Allow dbname to be written as part of connstring via pg_basebackup's -R option. 2024-03-21 10:50:33 +05:30
foreign Generalize relation analyze in table AM interface 2024-03-30 22:34:04 +02:00
jit jit: Require at least LLVM 10. 2024-01-25 15:42:34 +13:00
lib Use the pairing heap instead of a flat array for LSN replay waiters 2024-04-03 18:15:41 +03:00
libpq Remove translation markers from libpq-be-fe-helpers.h 2024-03-28 13:12:12 +01:00
mb Inline basic UTF-8 functions. 2024-03-20 09:40:57 -07:00
nodes Add basic JSON_TABLE() functionality 2024-04-04 20:20:15 +09:00
optimizer Fix assert failure when planning setop subqueries with CTEs 2024-04-02 12:15:45 +13:00
parser Add basic JSON_TABLE() functionality 2024-04-04 20:20:15 +09:00
partitioning Update copyright for 2024 2024-01-03 20:49:05 -05:00
pch Update copyright for 2024 2024-01-03 20:49:05 -05:00
port Inline pg_popcount() for small buffers. 2024-04-03 12:22:02 -05:00
portability Update copyright for 2024 2024-01-03 20:49:05 -05:00
postmaster Move code for backend startup to separate file 2024-03-18 11:38:10 +02:00
regex Update copyright for 2024 2024-01-03 20:49:05 -05:00
replication Ensure that the sync slots reach a consistent state after promotion without losing data. 2024-04-03 14:04:59 +05:30
rewrite Support MERGE into updatable views. 2024-02-29 15:56:59 +00:00
snowball Update copyright for 2024 2024-01-03 20:49:05 -05:00
statistics Update copyright for 2024 2024-01-03 20:49:05 -05:00
storage Avoid deadlock during orphan temp table removal. 2024-04-02 14:59:32 -04:00
tcop Invent SERIALIZE option for EXPLAIN. 2024-04-03 17:41:57 -04:00
tsearch Update copyright for 2024 2024-01-03 20:49:05 -05:00
utils Add basic JSON_TABLE() functionality 2024-04-04 20:20:15 +09:00
.gitignore Refactor dlopen() support 2018-09-06 11:33:04 +02:00
c.h Remove AIX support 2024-02-28 15:17:23 +04:00
fmgr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
funcapi.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
getopt_long.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
Makefile Put genbki.pl output into src/include/catalog/ directly 2024-03-14 07:11:21 +01:00
meson.build Update copyright for 2024 2024-01-03 20:49:05 -05:00
miscadmin.h Remove assertions that some compiler say are tautological 2024-03-20 09:14:51 +02:00
pg_config.h.in Add --copy-file-range option to pg_upgrade. 2024-03-06 12:01:01 +13:00
pg_config_ext.h.in Autoconfiscate selection of 64-bit int type for 64-bit large object API. 2012-10-07 21:52:43 -04:00
pg_config_ext.h.meson meson: Add initial version of meson based build system 2022-09-21 22:37:17 -07:00
pg_config_manual.h Introduce a non-recursive JSON parser 2024-04-04 06:46:40 -04:00
pg_getopt.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_trace.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgstat.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgtar.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgtime.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
port.h Replace calls to pg_qsort() with the qsort() macro. 2024-02-16 11:37:50 -06:00
postgres.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
postgres_ext.h Move RelFileNumber declarations to common/relpath.h. 2022-09-27 12:01:57 -04:00
postgres_fe.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varatt.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
windowapi.h Update copyright for 2024 2024-01-03 20:49:05 -05:00