Re: Speed up pg_checksums in cases where checksum already set

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Justin Pryzby <pryzby@telsasoft.com>
Cc: Greg Sabino Mullane <htamfids@gmail.com>, pgsql-hackers@postgresql.org
Date: 2021-05-27T04:16:56Z
Lists: pgsql-hackers
On Wed, May 26, 2021 at 09:29:43PM -0500, Justin Pryzby wrote:
> In one of the checksum patches, there was an understanding that the pages
> should be written even if the checksum is correct, to handle replicas.
> 
> From the v19 patch:
> https://www.postgresql.org/message-id/F7AFCFCD-8F77-4546-8D42-C7F675A4B680%40yesql.se
> +                * Mark the buffer as dirty and force a full page write.  We have to
> +                * re-write the page to WAL even if the checksum hasn't changed,
> +                * because if there is a replica it might have a slightly different
> +                * version of the page with an invalid checksum, caused by unlogged
> +                * changes (e.g. hintbits) on the master happening while checksums
> +                * were off. This can happen if there was a valid checksum on the page
> +                * at one point in the past, so only when checksums are first on, then
> +                * off, and then turned on again.

I am not really following the line of argument here.  pg_checksums
relies on the fact that the cluster has been safely shut down before
running.  So, if this comes to standbys, they would have reached a
consistent point, and the shutdown makes sure that all pages are
flushed.
--
Michael

Commits

  1. Optimize pg_checksums --enable where checksum is already set