调整Postgresql后,PgBench的结果更糟

时间:2013-08-23 23:18:52

标签: postgresql postgresql-9.1 performance-testing

我在Digital Ocean的8gb Ram / 4 CPU / 80gb SSD云服务器上测试PostgreSQL。我最初使用postgresql.conf中的默认设置运行PgBench,然后更改了一些常用设置 - shared_buffers,work_mem,maintenance_work_mem,effective_cache_size - 以反映8gb的RAM。在运行第二组测试后,我注意到我的一些结果实际上更糟。有关为什么会这样的任何建议?我对PgBench很新,并且总体上调整了PostgreSQL。

设置:

  • shared_buffers = 2048mb
  • work_mem = 68mb
  • maintenance_work_mem = 1024mb
  • effective_cache_size = 4096mb

试验:

  • pgbench -i -s 100
  • pgbench -c 16 -j 2 -T 60 -U postgres postgres
  • pgbench -S -c 16 -j 2 -T 60 -U postgres postgres
  • pgbench -c 16 -j 4 -T 60 -U postgres postgres
  • pgbench -S -c 16 -j 4 -T 60 -U postgres postgres
  • pgbench -c 16 -j 8 -T 60 -U postgres postgres
  • pgbench -S -c 16 -j 8 -T 60 -U postgres postgres

这些测试的效果如何?这是雇用PgBench的有效方式吗?我应该如何自定义测试以正确反映我的数据和服务器实例?

1 个答案:

答案 0 :(得分:6)

什么意思是“更糟”?你运行pgbench多久了?对于实际值,此测试应至少执行2小时。你有什么版本的PostgreSQL?

注意:您应该非常小心解释pgbench结果。您可能应该优化应用程序的执行,而不是pgbench。 pgbench适用于hw或sw检查,是优化PostgreSQL配置的糟糕工具。

提到的配置变量是配置的基础,你可能不会错在那里(服务器不能主动使用交换 - 这些变量确保它。)

我使用的公式:

-- Dedicated server 8GB RAM
shared_buffers = 1/3 .. 1/4 dedicated RAM
effecttive_cache_size = 2/3 dedicated RAM

maintenance_work_mem > higher than the most big table (if possible) 
                      else 1/10 RAM 
                      else max_connection * 1/4 * work_mem

work_mem  = precious setting is based on slow query analyse 
            (first setting about 100MB)

--must be true
max_connection * work_mem * 2 + shared_buffers 
          + 1GB (O.S.) + 1GB (filesystem cache) <= RAM size

通常,WAL缓冲区大小和检查点段的默认值也太低。你可以增加它。