Hohe iowait, während die wMB / s niedrig sind

8

Ich habe eine MySQL-Tabelle indiziert. Dieser Computer wird stark belastet.

Es scheint an einem hohen iowait zu liegen. Es zeigt aber auch, dass die wMB / s nur 2,87 beträgt.

Kann nicht einmal eine herkömmliche SATA-Festplatte mehr als 2,87 MB / s verarbeiten? Warum ist der Prozess dann so langsam?

iostat -x Berichte:

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

Antworten:

12

Sie schreiben kleine zufällige Schreibvorgänge, was so ziemlich das Langsamste ist, was Sie auf einer sich drehenden Festplatte tun können. Ich würde also sagen, dass Ihr Durchsatz (meinen) Erwartungen entspricht.

Ihre avgrq-szGröße beträgt 15,35, was bedeutet, dass Ihre durchschnittliche Anforderung das 15,35-fache der Sektorgröße Ihrer SATA-Festplatte beträgt (am häufigsten 512 Byte, möglicherweise jedoch 4096 Byte auf einer sehr neuen SATA-Festplatte). Sie schreiben also 15,35 x 512 Byte = 7.859,2 Byte (im Durchschnitt) pro Anfrage erhalten iostatSie 3.010.073,6 Bytes, wenn die 383 Schreibvorgänge / Sekunde gemeldet werden (wir multiplizieren mit einem Durchschnitt, daher kommen die 0,6 Bytes daher). Und 3.010.073,6 Bytes / Sekunde sind 2,87 MB / s.

Wie viele Schreibvorgänge Sie pro Sekunde ausführen können, hängt davon ab, wie viel die Festplatte benötigt, um die Köpfe zu bewegen. Grob gesagt nähern Sie sich jedoch der maximalen Anzahl von Schreibvorgängen, die Ihr Gerät in einer Sekunde ausführen kann.

Höhere Schreibgeschwindigkeiten auf sich drehenden Datenträgern treten auf, wenn Sie eine kleine Anzahl von Schreibvorgängen pro Sekunde mit einer großen kombinieren avgrq-sz.

Wenn dies ein kritisches Leistungsproblem für Sie ist, würde ich empfehlen, die verschiedenen SSD-Optionen zu untersuchen, die bei einer solchen Arbeitslast im Allgemeinen eine viel bessere Leistung erzielen.

pdo
quelle
4

Sie müssen iostatwährend der Überwachung mehrmals ausgeführt werden, um ein genaues Bild der Vorgänge zu erhalten. Oder verwenden Sie ein Tool wie Cacti , um solche Statistiken im Laufe der Zeit für Sie aufzubewahren, damit Sie sich das historische Diagramm ansehen können.

Am wahrscheinlichsten ist, dass die Festplatte aufgrund des DB-Tabellenscans auch viele Lesevorgänge ausführt und der von iostatIhnen veröffentlichte Lauf zufällig in einer Zeit ausgeführt wurde, in der das DBMS eher schrieb als las. Das mit dem Lesen verschachtelte Schreiben ist auf einer Festplatte sehr langsam, da es das Suchen umfasst, was das langsamste ist, was eine Festplatte tut. Wenn Sie sich die Festplatte anhören, können Sie sie wahrscheinlich wahnsinnig klappern hören, da sie schnell zwischen Schreiben und Lesen auf verschiedenen Teilen der Festplatte wechselt.

Damit dieser Prozess mit der erwarteten zweistelligen MByte / s-Rate ausgeführt wird, müssen Sie den Prozess in zwei Teile aufteilen, den Index im RAM aufbauen, während Sie den Tabellenscan durchführen, und dann den vollständigen Index ausschreiben. MySQL ist eine hochoptimierte Software. Wenn dies möglich wäre, würde dies meiner Meinung nach der Fall sein, und da dies nicht der Fall ist, kann dies nicht der Fall sein. Das heißt, es hat wahrscheinlich nicht genug RAM, um das zu tun. Das bedeutet entweder, dass Sie nicht genügend physischen Arbeitsspeicher auf dem Computer haben, damit der MySQL-Teil den vollständigen Index enthält, oder dass Sie ihm nicht genügend ausreichend RAM des Systems in der MySQL-Konfigurationsdatei zugewiesen haben. Das Optimieren von MySQL ist jedoch ein Thema für ein anderes Forum.

Warren Young
quelle