在为 Postgres
运行性能基准测试时,主要建议是:“自动化!”
如果您正在测量数据库性能,您可能不得不一遍又一遍地运行相同的基准测试。 要么是因为你想要一个稍微不同的配置,要么是因为你意识到你使用了一些错误的设置,或者可能是其他一些原因。通过自动化运行性能基准测试的方式,当发生这种情况时您不会太烦恼,因为重新运行基准测试将花费很少的精力(它只会花费一些时间)。
但是,为数据库基准测试构建这种自动化也可能非常耗时。 因此,在这篇文章中,我将分享我构建的工具,以便轻松运行针对 Postgres
的基准测试 — 特别是针对在 Azure Database for PostgreSQL 中名为 Hyperscale (Citus) 的 Azure
托管数据库服务中运行的 Postgres 的 Citus 扩展。
第一部分探讨了不同类型的应用程序工作负载及其特征,以及每种常用的现成基准。 之后,您可以深入了解如何在 Azure
上将 HammerDB
与 Citus
和 Postgres
一起使用。 是的,您还会看到一些示例基准测试结果。
为什么要先深入了解不同工作负载和数据库基准测试的背景? 因为有比自动化运行性能基准的方式更重要的事情:为您选择正确的基准!
- 针对不同工作负载的不同基准
- 基准规范与完整的基准测试套件
OLTP
工作负载OLAP
工作负载HTAP
工作负载- 比较基准测试结果的
Dangers
HammerDB TPROC-C
- 如何使用
HammerDB
、ARM
、Bicep
和cloud-init
对Citus
进行基准测试 - 在
Azure
上使用更大的Citus
数据库集群达到200 万 NOPM
- 享受对数据库性能进行基准测试的乐趣
针对不同类型工作负载的不同类型基准测试
每个使用数据库的人都将它用于不同的工作负载,因为每个人都有不同的数据集并运行不同的查询。 因此,在比较数据库性能时,您将通过运行基于您自己的工作负载的基准来获得最准确的结果。 然而,准备一个完全自定义的基准测试可能需要相当多的工作。
因此,您可能希望使用与您自己的工作负载非常相似的工作负载运行现成的基准测试。
基准规范与完整的基准套件
可以通过两种不同的方式为您提供现成的基准:
- 基准测试规范。 在这种情况下,描述了如何在文档中运行基准测试。 它将告诉您如何准备表、如何加载数据以及要运行哪些查询。 但是您需要手动完成所有这些操作。
- 完整的基准测试套件。 在这种情况下,将向您提供一个应用程序,它将运行基准测试。 您将基准测试应用程序配置为针对您的数据库服务器运行 — 一旦运行完成,它会吐出一些数字来指示运行的好坏。
很明显,完整的基准测试套件通常是您想要的,因为您可以简单地启动基准测试应用程序并获得结果。如果您只有一个基准测试规范,那么您首先需要编写工具来针对数据库运行该规范。
OLTP (在线事务处理)工作负载
数据库的一个常见工作负载类别称为 OLTP
(在线事务处理)。属于 OLTP
类别的工作负载会向数据库发送大量小型、短时间运行的查询(或事务)。
OLTP
工作负载的一些特征是:
- 插入、更新和删除只影响一行。 示例:将商品添加到用户的购物车。
- 读取操作仅从数据库中读取少数项目。 示例:为用户列出购物车中的商品。
- 很少使用聚合, 当它们被使用时,它们仅用于小数据集。 示例:获取用户购物车中所有商品的总价格。
创建此类工作负载的应用程序类型通常具有许多并发用户,这些用户每秒总共执行许多请求。 因此,对于 OLTP
工作负载,数据库能够同时处理大量此类查询非常重要。 应用程序的响应时间通常也很重要,因此数据库查询不应该花费很长时间来运行。 查询应始终在不到 5
秒内完成,大多数查询应在 100
毫秒内完成,甚至可能更快。
属于 OLTP
类别的知名数据库基准是 YCSB (full suite)、TPC-C (specification) 和 HammerDB TPROC-C (full suite)。人们通常感兴趣的这些 OLTP 基准测试中有两种类型的数字:
- YCSB: https://github.com/brianfrankcooper/YCSB/
- TPC-C: http://tpc.org/tpcc/default5.asp
- HammerDB TPROC-C: https://www.hammerdb.com/docs/ch03.html
TPS
吞吐量(每秒事务数)- 查询延迟,通常在不同的百分位数(
p95
等)
OLAP(在线分析处理)工作负载
另一种常见的数据库工作负载称为 OLAP
(在线分析处理)。 这是经常在数据仓库上运行的工作负载类型。
OLAP
工作负载的一些特征是:
- 定期批量插入数据。 新数据通常