PostgreSQL 9.2导致CPU利用率达到100%

我们有一个带有Hibernate 4.3的Java EE应用程序(一个在线数字图书馆门户),它连接到一个PostGres 9.2数据库。 在负载175个并发用户的login和访问系统负载testing时,数据库服务器CPU利用率上升到100%,并保持这种状态。

数据库服务器的硬件是:4核心Pentium 2+ GHz处理器。 12 GB RAM Ubuntu连接池大小为200.应用程序服务器是运行在不同的4核心Pentium 2+ GHz处理器上的Apache Tomcat 6.x。 12 GB RAM的Ubuntu机器。

请帮忙! 急需解决这个问题。

我遇到了类似的问题。 原因是 – 有些交易长期以来一直停滞不前。 因此CPU利用率提高到100%。 以下命令有助于找出运行时间最长的连接:

 SELECT max(now() - xact_start) FROM pg_stat_activity WHERE state IN ('idle in transaction', 'active'); 

该命令显示连接运行的时间。 这个时间不应该超过一个小时。 所以杀掉了长时间的连接或者任何一点卡住的连接,都为我工作。 我跟着这个post来监测和解决我的问题。 Post包含了很多有用的命令来监视这种情况。

你有一个DBA?

他可以回答关于数据库定期维护的问题,例如表格分析频率,数据库的足够内存吗?

你能find影响数据库CPU的查询吗?

现在有一些方法可以帮助您不使用硬件扩展,例如:

  1. 足够的内存pipe理 – 取决于您的数据库configuration/负载
  2. 避免全表扫描的适当索引 – 您必须对查询进行研究
  3. 常规表/索引分析 – DBA必须定期对其进行configuration
  4. 通用的应用程序数据库体系结构 – 这是个人的方法