最近、データベースサーバーを、4 xクアッドコアCPUと32GbのRAMを備えたアップグレードされたマシンに置き換えました。また、古いボックスを再利用して、ストリーミングレプリケーションのスレーブとして機能させました。どちらのボックスもCentOS 6.3とPostgreSQL 9.2を実行しています。Postgresは、各ボックスで実行されている唯一のものです。
この構成は約1か月ほど前から行われていましたが、トラフィックが増加し始めたときに突然、いくつかの問題が発生し始めました。私たちが見始めているのは、ときどき非常に高い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          f get_collation_oid                          ▒
+   1.56%        1822  postmaster  0x5a67e          f ginHeapTupleFastInsert                     ▒
+   1.53%        1766  postmaster  0x1929bc         f distribute_qual_to_rels                    ▒
+   1.33%        1558  postmaster  0x249671         f cmp_numericsアプリが実行するクエリはどれも特に複雑ではなく、説明プランは最大で1秒かかります(ほとんどははるかに高速です)。さらに、これはトラフィックが増加し始めたときに発生しますが、大きなトラフィックの負荷について話しているわけではありません(以前のマシンはかなり簡単に処理できました)。
この時点で、私は次に何をしようかについて少し困惑しています。任意の助けや提案をいただければ幸いです。役立つ追加情報がある場合は、質問してください。質問を修正できます。
ディスク構成:
- Perc 6i RAIDコントローラ
- 5 x 146GB 15K SASドライブ
- WALでは2x146GB RAID-1、システムとデータでは3x146GB RAID-5として構成
更新:
以下は、システムが正常に機能しているとき、およびCPUが起動したときのVMStat出力です。問題がある場合、割り込みは急上昇しているようです。
通常の操作中:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp---
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 18938590 303763 21947154    0    0    28    52 7466 12649  2  1 97  0  0   2013-01-14 16:03:25 EST
 0  0      0 18938396 303763 21947154    0    0     0    19 7107 12679  2  0 98  0  0   2013-01-14 16:03:35 EST
 1  0      0 18938904 303763 21947162    0    0     0    54 7042 12708  1  1 99  0  0   2013-01-14 16:03:45 EST
 1  0      0 18938520 303763 21947260    0    0    33    66 7120 12738  1  1 99  0  0   2013-01-14 16:03:55 ESTCPU使用率が高い場合:
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp---
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
343 0      0 32680468 226279 11339612    0    0     0   214 26692 12225 80  20  0  0  0   2013-01-11 16:45:53 EST
374 1      0 32673764 226291 11340345    0    0     0    77 54893 11572 80  20  0  0  0   2013-01-11 16:46:03 EST
383 0      0 32616620 226304 11340956    0    0     0   102 55540 12922 82  18  0  0  0   2013-01-11 16:46:13 EST
315 0      0 32602038 226320 11341378    0    0     0    79 54539 12441 82  18  0  0  0   2013-01-11 16:46:23 ESTperfツールを使用して、システム全体のプロファイリングとPostgreSQLプロファイリングを行うことを検討してください。CPU使用率が発生している場所を確認します。ちなみに、2番目の書式はvmstatどうしようもないほど壊れており、1番目の列は正しく配置されていないため、読みにくくなっています。を追加することでcommit_delay改善されるかどうかをテストします。RAIDコントローラにバッテリバックアップ式ライトバックキャッシュがあるかどうかを確認し、ない場合は取得します。に多くの時間が費やされていiowaitますか?これは一部のレポートではCPU使用率のように見えますが、実際にはそうではありません。