wMB / sが低いときにiowaitが高い


8

MySQLテーブルのインデックスを作成していました。そのコンピュータに高い負荷をかけます。

iowaitが高いためと思われます。ただし、wMB / sが2.87しかないことも示しています。

一般的なSATA HDDでも2.87MB / s以上を処理できませんか?なぜプロセスはそんなに遅いのですか?

iostat -x レポート:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.74    0.00    3.48   47.51    0.00   47.26

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00   300.00    0.00  383.00     0.00     2.87    15.35   142.00  374.64   2.61  99.90
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
scd0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00 2507.00     0.00     9.79     8.00   263.88  110.06   0.40  99.90
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    2.00     0.00     0.01     8.00     0.41  196.00 202.50  40.50
dm-3              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

回答:


12

小さなランダム書き込みを行っています。これは、回転ディスクで実行できる最も遅い処理であるため、スループットは(私の)期待に応えると思います。

あなたのavgrq-szサイズがあなたの平均要求があなたのSATAディスクのXセクタサイズ15.35であることを意味しており、15.35である(最も一般的に512のバイトが、非常に新しいSATAディスク上のおそらく4096バイト)、あなたがそうしている書き込み15.35×512バイト= 7,859.2バイト(平均)リクエストごとに、383書き込み/秒iostatが報告している時間は、3,010,073.6バイトを提供します(平均を乗算しているので、そこから.6バイトが取得されます)。また、3,010,073.6バイト/秒は2.87MB / sです。

1秒間に実行できる書き込み数は、ディスクがヘッドを移動するために必要な量に依存しますが、おおまかに言って、デバイスが1秒間に実行できる書き込みの最大数に近づいています。

1秒あたりの少数の書き込みと大量のを組み合わせると、回転ディスクの書き込み速度が速くなりますavgrq-sz

これがパフォーマンスの重要な問題である場合は、通常、このようなワークロードでパフォーマンスを大幅に向上させるさまざまなSSDオプションを調査することをお勧めします。


4

iostatこれを監視しながら何回か実行する必要があります。または、Cactiなどのツールを使用して、このような統計を長期間保持し、履歴グラフを確認できます。

最も可能性が高いのは、DBテーブルスキャンが原因で、ディスクも多くの読み取りをiostat実行していることと、投稿した実行が、DBMSが読み取りではなく書き込みを行っているときに行われたことです。読み取りとインターリーブされた書き込みは、シークを伴うため、ハードディスク上で非常に遅くなります。これは、ハードドライブが行う最も遅い処理です。ハードドライブを聞いていると、ハードディスクのさまざまな部分への書き込みと読み取りが急速に切り替わるので、狂ったように聞こえるでしょう。

このプロセスを2桁のMByte / sレートで実行するには、プロセスを2つに分割し、テーブルスキャンの実行中にRAMにインデックスを構築してから、完全なインデックスを書き出す必要があります。MySQLは高度に最適化されたソフトウェアであるため、これ実行できる場合そうなると思います。そうでない場合は、それができません。つまり、おそらくそれを行うのに十分なRAMがありません。それは、MySQLの部分に完全なインデックスを含めるのに十分な物理RAMがマシンにないか、MySQL構成ファイルでシステムのRAMの十分な部分を割り当てていないことを意味します。ただし、MySQLのチューニングは別のフォーラムのトピックです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.