如何做基准测试

本页目录

img

基准测试是一个很大的话题。此处,我们介绍了 Postgres 基准测试所需的最少步骤,使其信息丰富、有用且正确。

在本文中,我们假设遵循以下原则:

  1. 独占环境:整个机器只供我们独自使用 (没有其他人在使用),我们旨在研究 Postgres 的整体行为及其所有组件 (而非微观基准测试,如通过使用 EXPLAIN 研究特定查询或专注于底层组件如磁盘和文件系统的性能)。
  2. 高质量:我们追求诚实 (没有"营销式的基准测试"目标)、透明 (共享所有细节)、精确,并在发生错误时修正它们。每次基准测试运行应足够长,以考虑缓存的冷状态或各种波动等因素。通常,每种基准测试应该运行多次 (通常,进行 4-5 次),以确保测试的可重复性。学习现有经验是很有意义的:Brendan Gregg 的 "System Performance" 书中有一章关于基准测试的章节;此外,从其他领域 (如物理学等) 学习成功实验的原则和方法论也是有益的。
  3. 准备学习:我们有足够的专业知识来理解瓶颈和局限性,或准备利用他人的帮助,在必要时重新进行基准测试。

基准测试结构

基准测试是一种数据库实验,一般情况下,我们使用多个 DBMS 会话,研究系统的整体行为以及它的所有或特定组件 (比如缓冲池、检查点、复制情况等)。

每个基准测试都应该有一个明确定义的结构。总的来说,它包含两大部分:

Database Benchmark

每个部分都应有良好的文档记录,以便任何人都可以重现实验、理解主要指标 (延迟、吞吐量等),理解瓶颈,并在需要时进行额外的、修改后的实验。

数据库基准测试的所有方面的描述可能需要写一本书 — 在此,我仅提供基本建议,帮助你避免错误并提高基准测试的总体质量。

当然,某些内容可以根据需要省略。但通常建议,自动记录所有实验的文档和生成的文件,以便日后方便研究细节。你可以在这里找到一些为特定目的进行的基准测试的优秀示例 (例如,研究病态的子事务行为或衡量启用wal_compression的好处)。

输入: 环境



输入: 数据库

记录你使用的模式和数据。理想情况下,应该以完全可重现的形式 (SQL /转储文件) 记录。


输入: 工作负载


输入: 差异

可能有各种类型的"差异" (定义测试运行之间差异的研究对象)。以下是一些示例:

不建议将 SQL 查询中更改的模式更改视为"差异",因为:


输出: 收集成果

收集各种成果,并确保它们不会丢失 (例如,将它们上传到对象存储中)。


分析

以下是一些建议 (远不完整):

讨论与补充

在 GitHub 查看讨论

支持作者

感谢支持 PostgreSQL Howto 的长期维护。

微信赞赏码

读者交流群

二维码若已过期,可通过公众号 PostgreSQL 学徒或邮件联系。

PostgreSQL 学徒读者交流群二维码