web-dev-qa-db-ja.com

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

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
8
Cheng

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

avgrq-szサイズは15.35です。つまり、平均リクエストはSATAディスクのセクターサイズの15.35 x(最も一般的には512バイトですが、非常に新しいSATAディスクでは4096バイト)なので、15.35xを書き込んでいます。 512バイト=リクエストあたり7,859.2バイト(平均)、383書き込み/秒iostatが報告している回数は、3,010,073.6バイトになります(平均を掛けているので、.6バイトが由来します)。また、3,010,073.6バイト/秒は2.87MB /秒です。

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

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

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

12
pdo

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

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

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

4
Warren Young