web-dev-qa-db-ja.com

postgresqlサーバーで奇妙な高CPUI / O待機

私は現在、パフォーマンスの問題に本当に苦労しています。データベースサーバーに「重い」負荷がかかると、すべてのデータベースクエリに通常の1000倍の時間がかかります。

Ubuntu 12.04を実行し、postgresql9.2データベースをホストするサーバーがあります。サーバーはHetzner.deにあり、EX6(ubuntusソフトウェアRAIDを使用したRAID1セットアップの32Gbramと2つの3THDDを備えた8コアキセノン)です。大量のクエリを実行すると(夜間によく実行します)、CPU使用率のほとんどすべてがCPU I/O待機に費やされていることがわかります。 New Relicモニタリングをインストールしましたが、このCPU I/O待機の根本原因が何であるかを示す他の兆候が見当たらないようです。これは、明らかに私のパフォーマンスとスループットのボトルネックです。

したがって、問題は、このCPU I/Oが何を待機し、何を待機しているのかということです。

下の新しい遺物から手に入れることができるすべての概要チャートを追加しました。私は何を見落としていますか?明らかなボトルネックがあるに違いありませんか?どこに飛び込むべきですか?

データベースサーバーのCPU使用率-何かがおかしいと私に告げる邪悪なもの https://rpm.newrelic.com/public/charts/cEdIvvoQZCr

データベースサーバーの平均負荷 https://rpm.newrelic.com/public/charts/cMNdrYW51QJ

データベースサーバーの物理メモリ https://rpm.newrelic.com/public/charts/c3dZBntNpa1

データベースサーバーのディスクI/Oの利用-ご覧のとおり、ディスクはあまり使用されていないようです(ほとんど何もありません) https://rpm.newrelic.com/public/charts/9YEVw6RekFG

データベースサーバーネットワークI/O(Mb/s)-ネットワークは、すべての通信が行われるギガビット内部ネットワークです。 https://rpm.newrelic.com/public/charts/lKiZ0Szmwe7

実時間でのデータベース操作のトップ5 https://rpm.newrelic.com/public/charts/dCt45YH12FK

データベーススループット https://rpm.newrelic.com/public/charts/bIbtQ1mDzMI

データベースの応答時間 https://rpm.newrelic.com/public/charts/fPcNL8WA6xx

更新:

Sudo iostat -k 1を実行した後、私は疑わしくなり始めています。 NRには表示されない、このような出力がたくさん得られます。

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               0.00         0.00         0.00          0          0
sdb               0.00         0.00         0.00          0          0
sdc             546.00      2296.00      6808.00       2296       6808
sdd             593.00      1040.00      7416.00       1040       7416
md1               0.00         0.00         0.00          0          0
md0               0.00         0.00         0.00          0          0
md2            1398.00      3328.00     13064.00       3328      13064
md3               0.00         0.00         0.00          0          0
4
Niels Kristian

つまり、より高速なディスクが必要です。

プロセスがiowaitにある場合、これは、プロセスがIO要求を発行し、その要求の結果を待機していることを意味します。適切なRAMがあれば、ワーキングセットのほとんどがRAMにキャッシュされます。そのため、読み取りはこのIO競合の多くに寄与しないため、通常、書き込みが原因です。

ディスクIOグラフに関して、NewRelicが何らかの理由でIOメトリックを正しく収集していないと思われます。セカンダリを調べることをお勧めしますMuninのようなデータ収集システム。それ以外の場合は、次のコマンドを発行することで、ディスクIOをリアルタイムで監視できます。

$ iostat -k 1

これにより、リアルタイムのディスク読み取りと書き込みがkbpsで出力されます。 New Relicには見られない、かなりのアクティビティが見られると思います。

3
EEAA