0

我正在 Digital Ocean 的 8gb Ram/4 CPUs/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
  • 维护工作内存 = 1024mb
  • 有效缓存大小 = 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 的有效方法吗?我应该如何自定义测试以正确反映我的数据和服务器实例?

4

1 回答 1

6

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

注意:您应该非常小心解释 pgbench 结果。可能您应该优化应用程序的执行,而不是 pgbench。pgbench 适合硬件或软件检查,是优化 PostgreSQL 配置的坏工具。

提到的配置变量是配置的基础,你可能不会错(服务器永远不能主动使用交换——这些变量确保了这一点)。

我使用的一个公式:

-- 专用服务器 8GB RAM
shared_buffers = 1/3 .. 1/4 专用 RAM
有效缓存大小 = 2/3 专用 RAM

maintenance_work_mem > 高于最大的表(如果可能)
                      否则 1/10 内存
                      否则 max_connection * 1/4 * work_mem

work_mem = 珍贵设置基于慢查询分析
            (第一次设置约100MB)

--必须是真的
max_connection * work_mem * 2 + shared_buffers
          + 1GB (OS) + 1GB (文件系统缓存) <= RAM 大小

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

于 2013-08-24T07:15:55.493 回答