我似乎遇到了一个问题,运行 postgresql 的服务器负载相当高,平均负载超过 30。
该服务器作为 vmware 上的 vm 运行。
我想知道的是配置 postgresql 的最佳方法是什么,以使其不会使机器超载。
如果我向虚拟机投入更多资源,是否可以解决问题,还是它也会占用更多资源。只有 CPU 受到重击,内存(2GB)就足够了。
答案1
检查您的表是否已正确清理。Postgres 实例上的高 CPU 使用率通常表示表中有大量已删除的行。
如果你正在使用自动清理,请检查表统计信息以检查它是否正在运行
答案2
“高负载”可能意味着许多查询同时运行。尝试运行以下查询:
SELECT * FROM pg_stat_activity;
这将显示服务器当前正在做什么。也许您能从中看出一些可疑之处?一个不应该经常调用的查询?
另外,为了调试性能问题,设置log_min_duration_statementpostgresql.conf 中的选项。这将向您显示执行时间较长的查询。这些查询可能是造成最大负载的查询。通常需要优化单个错误查询(通过重写、添加索引或调整 PostgreSQL 配置)以大幅降低服务器负载。
答案3
我无法给你一个配置文件,因为大多数设置取决于你的环境,而且“高负载”并不是单一类型的问题。但这里有一些关于如何追踪 PGSQL 性能问题的提示。
首先,您必须检查数据库实际在做什么。通常,当您的数据库运行正常时,您会经常运行一些繁重的查询。检查您运行了哪些查询,然后使用 EXPLAIN ANALYZE 了解每个查询的成本。
接下来,您开始检查问题到底是什么。编写不当的查询可能会影响性能,但如果查询看起来不错(并且无法优化),您将不得不看看是否可以通过其他方式让数据库更容易。
检查 EXPLAIN 输出中的顺序扫描,尤其是当您在较大的表上执行此操作并分多个步骤时。检查是否可以引入有助于查询的索引。EXPLAIN 是查询的通用性能跟踪工具。
不要忘记对数据库进行 VACUM 和 ANALYSE。许多发行版会禁用自动清理服务,然后您必须手动执行 vacum/analyse。它们还可能禁用记帐,这会使分析过程效率大大降低。完成此操作后,返回并再次解释,以查看查询是否以不同的方式运行。
如果没有其他方法,您将不得不重建数据库结构或开始分发它,但我的经验是,除非您运行的站点数据库负载非常重或同时有数千个用户,否则您不需要这样做。通常是数据库无法以最佳方式检索查询。
最后检查http://wiki.postgresql.org/wiki/Performance_Optimization了解更多提示。