Thread: [GENERAL] pg_rewind - enable wal_log_hints or data-checksums
Hi
In the PostgreSQL documentation for pg_rewind:
pg_rewind requires that the target server either has the wal_log_hints option enabled in postgresql.conf or data checksums enabled when the cluster was initialized with initdb.
What is the difference between the two options?
What are the advantages and disadvantages between the two?
Which one is the the preferred option?
Thanks
Regards
Dylan
On Mon, Jun 5, 2017 at 9:37 AM, Dylan Luong <Dylan.Luong@unisa.edu.au> wrote: > pg_rewind requires that the target server either has the wal_log_hints > option enabled in postgresql.conf or data checksums enabled when the cluster > was initialized with initdb. Yes, this is to make sure that you don't finish with a corrupted target server if a hint bit is set on a page after a checkpoint. Any of those options make sure that a full-page write is generated in this case. > What is the difference between the two options? Data checksums calculate 2 bytes of checksum data and write it to each page that is evicted from shared buffers. Each page read from disk has its checksum checked. In some workloads, like a heavy read load where a lot of page evictions happen, this can induce a couple of percents of performance lost. In my own experience, that's 1~2%. > What are the advantages and disadvantages between the two? > Which one is the the preferred option? If you care more about performance or if you use a file system that has its own block-level checksum, wal_log_hints would be preferred. Data checksums offer more guarantees in terms of integrity though when looking for corrupted data. Things get found more quickly. -- Michael
Hi Michael,
I first use initdb, and set wal_log_hints=off, data_checksums=off, and full_page_writes=on. Starting pg and running for a while.
Then switch over happened, I used the following commands:
1. Old master postgresql.conf set wal_log_hints=on, then start and stop pg.
2. using pg_rewind --target-pgdata=OldMaster --source-server=NewMaster (no error, old master's wal_log_hints has been set to on)
I first use initdb, and set wal_log_hints=off, data_checksums=off, and full_page_writes=on. Starting pg and running for a while.
Then switch over happened, I used the following commands:
1. Old master postgresql.conf set wal_log_hints=on, then start and stop pg.
2. using pg_rewind --target-pgdata=OldMaster --source-server=NewMaster (no error, old master's wal_log_hints has been set to on)
I wonder if this could lead to data corruption.
On Tue, Feb 18, 2025 at 2:27 PM Michael Paquier <michael.paquier@gmail.com> wrote:
On Mon, Jun 5, 2017 at 9:37 AM, Dylan Luong <Dylan.Luong@unisa.edu.au> wrote:
> pg_rewind requires that the target server either has the wal_log_hints
> option enabled in postgresql.conf or data checksums enabled when the cluster
> was initialized with initdb.
Yes, this is to make sure that you don't finish with a corrupted
target server if a hint bit is set on a page after a checkpoint. Any
of those options make sure that a full-page write is generated in this
case.
> What is the difference between the two options?
Data checksums calculate 2 bytes of checksum data and write it to each
page that is evicted from shared buffers. Each page read from disk has
its checksum checked. In some workloads, like a heavy read load where
a lot of page evictions happen, this can induce a couple of percents
of performance lost. In my own experience, that's 1~2%.
> What are the advantages and disadvantages between the two?
> Which one is the the preferred option?
If you care more about performance or if you use a file system that
has its own block-level checksum, wal_log_hints would be preferred.
Data checksums offer more guarantees in terms of integrity though when
looking for corrupted data. Things get found more quickly.
--
Michael
--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general