我似乎遇到了一个问题,即运行 postgresql 的服务器正在经历相当高的负载,平均值高于 30。
此服务器在 vmware 上作为 vm 运行。
我想知道的是配置 postgresql 的最佳方法是什么,以免它过载。
如果我要在 VM 上投入更多资源,那会解决问题还是也会吞噬它。只是CPU受到重创,内存(2GB)就足够了。
我似乎遇到了一个问题,即运行 postgresql 的服务器正在经历相当高的负载,平均值高于 30。
此服务器在 vmware 上作为 vm 运行。
我想知道的是配置 postgresql 的最佳方法是什么,以免它过载。
如果我要在 VM 上投入更多资源,那会解决问题还是也会吞噬它。只是CPU受到重创,内存(2GB)就足够了。
“高负载”可能意味着大量查询并行运行。尝试运行以下查询:
这将显示服务器当前正在做什么。也许你可以在这里看到一些可疑的东西?一个不应该经常调用的查询?
此外,对于调试性能问题,在 postgresql.conf中设置log_min_duration_statement选项非常有用。这将向您展示需要花费大量时间执行的查询。这些可能是导致最大负载的那些。通常需要优化单个错误查询(通过重写、添加索引或调整 PostgreSQL 配置)以大大降低服务器负载。
我不能给你一个配置文件,因为大多数设置取决于你的环境,而“高负载”并不完全是单一类型的问题。但是这里有一些关于如何跟踪 PGSQL 性能问题的提示。
好吧,首先你必须检查你的数据库实际上在做什么。通常,当您逃跑 DB 时,您会遇到一些频繁运行的繁重查询。检查您运行的查询,然后使用 EXPLAIN ANALYZE 了解每个查询的成本。
接下来,您开始检查实际问题所在。写得不好的查询可能会破坏性能,但是如果查询看起来不错(并且无法优化),您将不得不看看是否可以通过其他方式使数据库更容易。
检查您的 EXPLAIN 输出是否有顺序扫描,特别是如果您在较大的表上并分多个步骤执行此操作。检查您是否可以引入有助于查询的索引。EXPLAIN 是查询的通用性能跟踪工具。
不要忘记 VACUM 和 ANALYZE 您的数据库。许多发行版禁用了 autovacum 服务,然后您必须手动进行 vacum/analysis。他们还可能会禁用会计,这会降低分析过程的效率。完成此操作后,返回并再次解释以查看查询是否以不同方式运行。
如果没有其他帮助,您将不得不重建您的数据库结构或开始分发它,但我的经验是,除非您运行一个数据库负载非常重的站点或数千个同时用户,否则您不需要这样做。通常是数据库无法以最佳方式检索的查询。
最后检查http://wiki.postgresql.org/wiki/Performance_Optimization以获得更多提示。
检查您的桌子是否已正确吸尘。postgres 实例上的高 CPU 使用率通常表明表中有大量已删除的行。
如果您使用自动清理,请检查表统计信息以检查它是否实际运行