根据用户评论,PostgreSQL 数据校验和的运行时开销(CPU 和存储)非常小,但允许(除其他事项外)用于pg_rewind
时间点恢复 (PITR)。但是,默认情况下不会启用数据校验和,并且在没有相当长的停机时间的情况下不可能在现有的 HA 集群上启用它。(如果我理解正确,您不能仅在热备份上启用校验和,一旦在热备份上启用校验和完成后就不能将其提升为新主服务器。)
如果默认启用数据校验和,是否存在一些鲜为人知的问题?还是默认状态(禁用校验和)只是由于历史原因,即使启用数据校验和在所有情况下都更有意义?
启用数据校验和不是免费的:
你必须经常计算校验和,这会占用 CPU
数据校验和要求提示位被 WAL 记录,这增加了需要写入的 WAL 的数量
此外,除非您使用劣质存储,否则数据校验和不会提供任何好处,在这种情况下,数据可能会在您写入块和再次读取块之间发生变化。
如果要使用
pg_rewind
,则不需要数据校验和。启用参数就足够了wal_log_hints
。我将引用核心 postgresql 开发人员的一些意见
数据校验和不能捕捉到那么多实际数据损坏,不是免费的(尤其是小尺寸的 shared_buffers - 校验和是在将页面写入磁盘或从磁盘读取到 shared_buffers 时计算的)既不是 CPU 也不是 WAL 大小。
本身没有问题,但目前的普遍共识是,默认启用它对最终用户没有太大好处。