我们最近用升级后的机器替换了我们的数据库服务器,该机器具有 4 个四核 CPU 和 32Gb 内存。我们还重新利用了我们的旧盒子作为流复制的奴隶。两个机器都运行 CentOS 6.3 和 PostgreSQL 9.2。Postgres 是每个盒子上唯一运行的东西。
这种配置已经存在大约一个月左右,当流量开始增加时,我们突然开始遇到一些问题。我们开始看到有时 CPU 负载非常高(顶部显示平均负载为 270),当我们可以查看时,pg_stat_activity
我们将看到我们的大部分连接都处于该COMMIT
状态。如果不理会,这最终将完成,系统将响应连接变为IDLE
。我们已尝试禁用复制以查看是否可能是问题所在,但问题仍然存在。
我们已经尝试诊断正在发生的事情,但有点迷茫。运行的输出perf
显示类似于下面的内容,我不知道0x347ba9
代表什么。
+ 41.40% 48154 postmaster 0x347ba9 f 0x347ba9 ?
+ 9.55% 10956 postmaster 0x2dc820 f set_config_option ?
+ 8.64% 9946 postmaster 0x5a3d4 f writeListPage
+ 5.75% 6609 postmaster 0x5a2b0 f ginHeapTupleFastCollect ?
+ 2.68% 3084 postmaster 0x192483 f build_implied_join_equality ?
+ 2.61% 2990 postmaster 0x187a55 f build_paths_for_OR ?
+ 1.86% 2131 postmaster 0x794aa …
Run Code Online (Sandbox Code Playgroud) postgresql ×1