我在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。
设置:
试验:
这些测试的效果如何?这是雇用PgBench的有效方式吗?我应该如何自定义测试以正确反映我的数据和服务器实例?
答案 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缓冲区大小和检查点段的默认值也太低。你可以增加它。