我有一台在 Centos 5 上具有 4GB RAM 和 PostgreSQL 9.0.3 的服务器。我正在使用pgbench
和pgbench-tools
通过两个查询来衡量性能pgbench-tools
:select
和tpc-b
。
使用默认设置postgresql.conf
并使用选择查询,我得到以下结果:
规模:1、10、100、1000。
每秒交易数:10000、8800、7500、100。
(该表的记录数为scale*100000)
我将选项增加到shared_buffer
256MB(以前是 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。
当我在修改配置参数后发现性能发生变化时,我总是会再次尝试原始配置,以确保这是导致问题的原因。我经常惊讶地发现,每次运行测试时,速度都会变慢,而磁盘位置速度差异是导致该问题的原因之一。