pipe理postgresql数据库的高负载

我似乎有一个问题,运行postgresql的服务器正在经历相当高的负载,平均在30以上。

此服务器在vmware上作为虚拟机运行。

我想知道的是什么是最好的方式来configurationpostgresql,以便它不会超载框。

如果我要在虚拟机上投入更多的资源,是否可以解决这个问题呢,还是会吞并呢? 只有CPU正在受到打击,内存(2GB)已经足够。

检查你的桌子是否被正确吸取。 postgres实例中的CPU使用率过高通常表示表中有大量已删除的行。

如果您正在使用自动吸尘器,请检查表格统计信息以检查它是否正在运行

“高负载”可能是大量的并行查询。 尝试运行以下查询:

SELECT * FROM pg_stat_activity; 

这将显示服务器正在做什么。 也许你可以在这里看到一些可疑的东西? 一个不应该经常被调用的查询?

另外,为了debugging性能问题,在postgresql.conf中设置log_min_duration_statement选项是非常有用的。 这将向您显示需要花费大量时间执行的查询。 这些可能是最负荷的。 通常需要优化一个错误的查询(通过重写,增加索引或调整PostgreSQLconfiguration)来降低服务器的负载。

我不能给你一个configuration文件,因为大多数设置取决于你的环境,“高负载”不是一个单一types的问题。 但是这里有一些关于如何跟踪PGSQL的性能问题的提示。

那么,首先你必须检查你的数据库实际上在做什么。 通常当你跑掉DB时,你会遇到一些频繁运行的大量查询。 检查您运行的查询,然后使用EXPLAIN ANALYZE获取每个查询的成本。

接下来,你开始研究实际上是什么问题。 写得不好的查询可能会影响性能,但是如果查询看起来不错(不能优化),则必须查看是否可以通过其他方式使数据库更容易。

检查您的EXPLAIN输出进行顺序扫描,特别是如果您在较大的表格和几个步骤中进行。 检查是否可以引入索引,以帮助您查询。 EXPLAIN是用于查询的一般性能跟踪工具。

不要忘记VACUM和分析你的数据库。 许多发行版都会禁用autovacum服务,然后您必须手动执行虚拟/分析。 他们也可能会禁用会计,这使得分析过程效率更低。 执行此操作后,请返回并再次解释查看查询是否运行不同。

如果没有其他的帮助,你将不得不重build你的数据库结构或开始分发它,但我的经验是,你不需要这样做,除非你运行一个网站数据库负载非常沉重或成千上万的同时用户。 这通常是查询数据库无法以最佳方式检索。

最后检查http://wiki.postgresql.org/wiki/Performance_Optimization获取更多提示。