PostgreSQL 中的 shared_buffers 选项

PostgreSQL 中的 shared_buffers 选项

我有一台在 Centos 5 上具有 4GB RAM 和 PostgreSQL 9.0.3 的服务器。我正在使用pgbenchpgbench-tools通过两个查询来衡量性能pgbench-toolsselecttpc-b

使用默认设置postgresql.conf并使用选择查询,我得到以下结果:

规模:1、10、100、1000。
每秒交易数:10000、8800、7500、100。

(该表的记录数为scale*100000)

我将选项增加到shared_buffer256MB(以前是 32 MB)并得到以下结果:

规模:1、10、100、1000。
每秒交易数:10000、8000、3200、30

为什么与第一次测试相比性能如此低当第二个基准测试中的规模为 100 或更大时?我所做的唯一一件事就是增加内存。

答案1

增加 shared_buffers 时唯一持续使 pgbench 变慢的是一个称为断言检查的调试选项。如果您在 psql 中执行此操作:

show debug_assertions;

并且它已打开,您的构建存在此问题,并且您看到的结果是预期的。您需要一个未启用断言调试的新安装才能解决此问题。

否则,如果您没有多次执行所有这些操作,我不会那么确定此处的原因是 shared_buffers 更改。举个例子,如果 autovacuum 恰好在您的大型数据库运行时运行,它将减慢测试结果。测试开始时启动的检查点也会如此。关闭 autovacuum 以将其从测试中消除,然后打开 log_checkpoints 以查看它是否会造成干扰。

第三种可能性是,磁盘上移动的东西会导致结果变慢 50%,我几乎可以肯定您在某种程度上也遇到了这种问题。磁盘早期部分的速度大约是后期部分的两倍,当您反复运行 pgbench 时,数据会移动到较慢的部分。我最终重建了整个文件系统以获得可重复的结果,这是确保您从驱动器上的同一点开始的唯一方法。这不会影响较小规模的结果,因为它们都适合 RAM。

当我在修改配置参数后发现性能发生变化时,我总是会再次尝试原始配置,以确保这是导致问题的原因。我经常惊讶地发现,每次运行测试时,速度都会变慢,而磁盘位置速度差异是导致该问题的原因之一。

相关内容