Pgbench 测试
使用 pgBench 9.0 测试性能回归
此页面最终将合并到 使用 pgbench 进行回归测试
为了测试性能回归(或改进),有必要在同一台机器上安装两个版本的 PostgreSQL。 否则,您将没有可比较的统计数据。 例如,您可能安装了 8.4.3 和 9.0alpha5,或者您可能安装了 9.0alpha4 和 9.0alpha5。 您还可以以两种模式运行相同的测试版本:例如,使用 HS/SR 和不使用 HS/SR。
由于 pgbench 测试非常简单,您需要运行几个不同的测试才能看到性能的不同方面。 最好至少运行三次,因为 pgbench 中存在一些随机性。
始终在两个数据库上运行相同版本的 pgBench,可能使用较新的版本。
一些因素
- 在哪里运行 pgBench:理想情况下,您希望从与保存数据库的机器不同的机器上运行它。 这样,您就不会让 pgBench 从数据库中占用 CPU。
- 要使用的线程和客户端数量:这取决于您正在测试的机器上的内核数量。 对于数据库可用的每个内核,我建议使用 1 个线程和 2 个客户端。 注意:不要在非线程安全系统上使用多线程 pgBench; 您将获得不可靠的结果。
- PostgreSQL 配置:使用您认为对被测机器来说正常的性能配置。 尽可能在两者中使用相同的配置。
- 时间 vs. 事务:运行特定时间段的 pgbench 的结果更容易比较。 您还知道它们需要多长时间才能完成。
- 初始化数据库:如果您要连续使用同一个数据库进行多次测试运行,则重要的是您要先在数据库上运行 pgbench 至少 20 分钟来“预热”它,否则第一次或两次测试将显示出虚假的高速。 或者,您可以为每次测试运行初始化一个新的数据库。
- 运行时间:理想情况下,您应该对每个 pgbench 运行至少进行一个小时才能获得有用的结果。 然而,这对那些没有专门的测试服务器或没有全职做这件事的人来说,会妨碍他们进行大量的不同测试。 但是,请确保至少运行 10 分钟才能获得可以测量的结果。 您可以将最有趣的测试结果运行 1 小时。 下面的所有测试都运行了 10 分钟。
以下是测试的一些示例。 给出的命令行适用于一台数据库可使用 2 个内核且线程安全的机器。
内存 vs. 磁盘性能
您希望在与磁盘相关的三个性能级别上测试 pgbench:在缓冲区中,主要在缓存中,以及全部在磁盘上。 您可以通过更改比例因子来控制它,按照以下两个公式进行操作,假设使用专用数据库服务器。
scale / 75 = 1GB 数据库
- 在缓冲区测试中:0.1 X RAM
- 主要缓存:0.9 X RAM
- 主要在磁盘上:4.0 X RAM
请注意,主要在磁盘上的测试可能需要您为数据库提供大量的磁盘空间。
示例:以下假设一台使用 2 个内核和 2GB RAM 的机器,运行时间为 10 分钟。
缓冲区测试
- pgbench -i -s 15 bench1
- pgbench -c 4 -j 2 -T 600 bench1
主要缓存测试
- pgbench -i -s 70 bench2
- pgbench -c 4 -j 2 -T 600 bench2
在磁盘上测试
- pgbench -i -s 600 bench3
- pgbench -c 4 -j 2 -T 600 bench3
衡量初始化三个数据库所需的时间也将提供有趣的结果。
读 vs. 写性能
测试不同写模式的相对速度也很有意思。 对于此组测试,请使用主要缓存或在磁盘上的数据库大小,或介于两者之间的尺寸。
以下测试假设使用与上述相同的机器。 所有测试都从以下开始
- pgbench -i -s 70 bench2
读写测试
- pgbench -c 4 -j 2 -T 600 bench2
只读测试
- pgbench -c 4 -j 2 -T 600 -S bench2
简单写测试
- pgbench -c 4 -j 2 -T 600 -N bench2
连接和争用
对于这组测试,我们想要测试 PostgreSQL 在不同连接活动级别下的行为。 在这种情况下,它与您拥有多少个内核密切相关。 我们再次假设使用相同的 2 个内核、2GB 内存的机器。
不幸的是,您只能从另一台至少具有与数据库服务器一样多内核的机器上有效地执行此测试。
所有测试都从以下开始
- pgbench -i -s 30 bench
单线程
- pgbench -c 1 -T 600 bench
正常负载
- pgbench -c 8 -j 2 -T 600 bench
严重争用
- pgbench -c 64 -j 4 -T 600 bench
无争用的高连接数
- pgbench -c 64 -j 4 -T 600 -N bench
频繁重新连接(模拟无连接池)
- pgbench -c 8 -j 2 -T 600 -C bench
预备 vs. Ad-Hoc 查询
pgBench 9.0 还允许您测试预备查询对性能的影响。 假设使用与上述相同的数据库服务器。
用以下命令初始化
- pgbench -i -s 70 bench
未预备,读写
- pgbench -c 4 -j 2 -T 600 bench
预备,读写
- pgbench -c 4 -j 2 -T 600 -M prepared bench
未预备,只读
- pgbench -c 4 -j 2 -T 600 -S bench
预备,只读
- pgbench -c 4 -j 2 -T 600 -M prepared -S bench