最近我一直在为它的数据校验和特性研究 PostgreSQL 基准。initdb 这个非常有价值的选项——在 2013 年的 9.3 版中引入——允许快速检测损坏的磁盘数据页。它提供了一个绝佳的机会,可以在您的数据损坏之前简单地故障转移到备用服务器,而不是忍受之后发现损坏并尝试恢复的恐惧。
但是人们关心速度和安全性一样重要,而且该功能会带来性能成本,因为每次从磁盘读取或写入数据时都会对数据进行校验和。客户对该功能感兴趣,但他们想知道性能成本。到目前为止,我们的答案是“我们真的不知道”,如果互联网搜索是任何指标,没有人真正知道。
此功能还有一个挑战:对于低于 12 的 PostgreSQL 版本,它只能在首次创建集群时启用。如果您创建启用此选项的集群,则无法禁用它。PostgreSQL 版本 12 引入了一个实用程序_pg_checksums_,它可以在 PostgreSQL 集群中启用或禁用数据校验和,但在实用程序运行时集群必须仍然处于脱机状态。客户希望在向其提交新集群之前或在迁移到启用了该功能的新集群之前了解此功能的性能影响。
_请注意:亚马逊在所有_RDS PostgreSQL 集群上启用数据校验和,在他们的平台上它_不是_一个可配置的选项。我打算让您对这个功能保持同样的清晰和信心。
为了找到有关性能的答案,我的第一直觉是运行基准测试并凭经验获得答案。我确实运行了基准测试并得到了答案。然而,要以一种有意义的方式建立一个非常棘手的基准,需要几个不同的基准来理解这个问题,因为有很多因素在起作用:
- 计算校验和的 CPU 时间
- 预写日志中的模糊差异对磁盘写入有显着影响。
- 缓存
- 效果的工作负载依赖性
在 CommandPrompt 白皮书中,我提供了几个精心设计的基准测试的结果,这些基准测试说明了由于该功能而承受大量额外 CPU 和磁盘 IO 负载的常见工作负载类型,以及不承担额外负载的其他工作负载类型加载。从白皮书的技术摘要中,以下是关于数据校验和对不同工作负载类型的性能影响的一些结论:
- 任何具有高共享缓冲区命中率的应用程序:影响不大。
- 任何具有高读/写比率的应用程序:影响很小。
- 读取/插入比率低、更新和删除很少的数据记录应用程序:影响很小。
- 具有相同比率的读取/插入,或许多更新或删除,以及低共享缓冲区命中率(例如,ETL 工作负载)的应用程序,尤其是在行分散在磁盘页面中的情况下:期望 CPU 和磁盘 I 增加一倍或更多/O 使用。
由于硬件故障和低级数据损坏在数据库操作中非常常见,并且数据校验和功能提供了针对此类事件的强大保护,因此命令提示符建议管理员计划使用该功能实施集群,并具有先见之明其性能影响。如需全面分析,请下载我们的白皮书。
《CommandPrompt_Performance_Analysis_of_PostgreSQL_Data_Checksums》
CommandPrompt 白皮书下载:https://www.modb.pro/doc/78485
原文标题:Performance Analysis of PostgreSQL Data Checksums
原文作者: Eric Worden
原文链接:https://commandprompt.com/blog/performance-postgresql-data-checksums/