postgresql/contrib/pageinspect/sql
Heikki Linnakangas 8af2565248 Introduce a new smgr bulk loading facility.
The new facility makes it easier to optimize bulk loading, as the
logic for buffering, WAL-logging, and syncing the relation only needs
to be implemented once. It's also less error-prone: We have had a
number of bugs in how a relation is fsync'd - or not - at the end of a
bulk loading operation. By centralizing that logic to one place, we
only need to write it correctly once.

The new facility is faster for small relations: Instead of of calling
smgrimmedsync(), we register the fsync to happen at next checkpoint,
which avoids the fsync latency. That can make a big difference if you
are e.g. restoring a schema-only dump with lots of relations.

It is also slightly more efficient with large relations, as the WAL
logging is performed multiple pages at a time. That avoids some WAL
header overhead. The sorted GiST index build did that already, this
moves the buffering to the new facility.

The changes to pageinspect GiST test needs an explanation: Before this
patch, the sorted GiST index build set the LSN on every page to the
special GistBuildLSN value, not the LSN of the WAL record, even though
they were WAL-logged. There was no particular need for it, it just
happened naturally when we wrote out the pages before WAL-logging
them. Now we WAL-log the pages first, like in B-tree build, so the
pages are stamped with the record's real LSN. When the build is not
WAL-logged, we still use GistBuildLSN. To make the test output
predictable, use an unlogged index.

Reviewed-by: Andres Freund
Discussion: https://www.postgresql.org/message-id/30e8f366-58b3-b239-c521-422122dd5150%40iki.fi
2024-02-23 16:10:51 +02:00
..
brin.sql Add empty BRIN ranges during CREATE INDEX 2023-12-08 17:14:32 +01:00
btree.sql Add bt_multi_page_stats() function to contrib/pageinspect. 2023-01-02 13:02:29 -05:00
checksum.sql Add an explicit test to catch changes in checksumming calculations. 2020-03-08 15:09:14 -04:00
gin.sql pageinspect: Fix handling of all-zero pages 2022-04-14 15:08:03 +09:00
gist.sql Introduce a new smgr bulk loading facility. 2024-02-23 16:10:51 +02:00
hash.sql pageinspect: Fix failure with hash_bitmap_info() for partitioned indexes 2023-12-19 18:19:05 +09:00
oldextversions.sql pageinspect: Improve page_header() for pages of 32kB 2021-07-12 11:05:27 +09:00
page.sql Prevent instability in contrib/pageinspect's regression test. 2022-11-21 10:50:50 -05:00