私は現在、パフォーマンスの問題に本当に苦労しています。データベースサーバーに「重い」負荷がかかると、すべてのデータベースクエリに通常の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
つまり、より高速なディスクが必要です。
プロセスがiowaitにある場合、これは、プロセスがIO要求を発行し、その要求の結果を待機していることを意味します。適切なRAMがあれば、ワーキングセットのほとんどがRAMにキャッシュされます。そのため、読み取りはこのIO競合の多くに寄与しないため、通常、書き込みが原因です。
ディスクIOグラフに関して、NewRelicが何らかの理由でIOメトリックを正しく収集していないと思われます。セカンダリを調べることをお勧めしますMuninのようなデータ収集システム。それ以外の場合は、次のコマンドを発行することで、ディスクIOをリアルタイムで監視できます。
$ iostat -k 1
これにより、リアルタイムのディスク読み取りと書き込みがkbpsで出力されます。 New Relicには見られない、かなりのアクティビティが見られると思います。