我正试图修复一个高PostgreSQL CPU使用问题。我们使用的是PostgreSQL 8.0.9,当我们的JEE应用程序(在JBoss中)在某些负载增加的情况下使用时,top显示PostgreSQL的进程增长缓慢。当出现问题时,大约有12-15个PostgreSQL进程在进程信息的最右边显示SELECT,每个进程大约有6-7%的CPU使用率,然后应用程序会慢很多。
JBoss版本: JBoss (MX MicroKernel) 4.0.3
操作系统: CentOS Linux5.5
内核和CPU: Linux2.6.18-194.26.1.el5在x86_64上
处理器信息:2 x Intel(R) Xeon(R) CPU E5420 @ 2.50GHz,8核
目前,我们的想法是在它上投入更多的硬件。如果我们这样做,最好的选择是像下面的选项A或选项B?
选项A: 4×AMD™6100系列处理器,每个处理器有12个核心
备选方案B: 4个Intel Xeon 7500系列处理器,每个处理器有8个核心
假设使用CentOS 8.0.9的PostgreSQL Linux5.5将按比例增加这许多处理器和内核(Ex ),这是正确的。4个处理器,每个处理器有12个核)?在向它投入更多硬件方面,我还有什么要考虑的吗?
发布于 2011-02-25 08:40:29
这个问题是不可能回答的,我们不知道发生了什么。你说的是12到15个连接,几乎什么都没有。但是,当执行非常复杂的查询或使用糟糕的数据库模式、缺少索引等时,cpu的使用率随时可能上升。
版本8.0.9是严重的问题,8.0是EOL在2010年10月和最新的修复版本8.0.26 (4年后的8.0.9)。您至少应该对此版本进行更新,以修复8.0中的许多错误。
开始记录查询,使用EXPLAIN查看查询计划,查看真空,您可能也需要重新索引。目前,您的硬件看起来很好,您首先必须找到问题的根源。
考虑雇佣一个PostgreSQL dba几天。
发布于 2011-02-25 00:13:12
如果您显示的CPU使用率很高,可能是由于查询速度慢。我建议在postmaster.conf
中启用缓慢的查询日志功能,并检查所需的查询时间比应该使用的时间长。
也有可能是I/O绑定的,因为缓慢的磁盘很容易导致查询开始备份。我建议安装htop
并检查您的CPU等待时间的百分比归因于iowait。
除此之外,我高度鼓励升级到最新版本。自8.0以来,性能出现了一些巨大的改进,当前的稳定版本(在撰写本文时为9.0.x)提供了更多的EXPLAIN VERBOSE ANALYZE
查询信息。
一般来说(以及所有其他条件相同),当您添加核心时,PostgreSQL扩展得非常好(每个额外的核心在性能上增加了大约96%的增益(从理论上的100%性能增益中,每个额外的核心可能增加))。
然而,我最初的直觉是,你的磁盘无法跟上。
发布于 2011-02-25 03:35:32
我想你会从这本书PostgreSQL 9.0高性能中受益。它有PDF格式(即时下载),也有死树格式。
我们刚刚用本书中的建议重建了我们的数据库。我们的新数据库盒把旧的一个吹走了,而且我们不必花很多钱去做它。有些章节专门针对你的每一个问题。有答案,但更好的是,也有方法(你如何衡量你的硬件知道它有多快?)
我不是Postgresql专家,但我将告诉您关于硬件和Postgresql的知识。你的里程可能会不同。
一般来说,对于我有经验的数据库,比CPU的数量和速度更重要的是:
您可以通过RAID获得I/O带宽。RAID10为大部分Postgresql数据做得很好。驱动器越多,性能越好。如果可以的话,将xlog放在另一个设备上。那个可以是RAID1。使用带有电池支持缓存的硬件RAID卡将给您最好的性能。
https://serverfault.com/questions/240204
复制相似问题