Suchvorgänge auf der Festplatte stellen einen für die Leistung beträchtlichen Engpass dar. Dieses Problem wird in dem Moment umso offensichtlicher, wenn die Datenmengen so groß werden, dass ein effizientes Caching unmöglich wird. Bei großen Datenbanken, bei denen der Datenzugriff mehr oder weniger zufällig erfolgt, können Sie sich darauf verlassen, dass Sie mindestens einen Lese- und mehrere Suchvorgänge benötigen, um Daten zu schreiben. Um dieses Problem zu verringern, sollten Sie Festplatten mit schnellen Zugriffszeiten verwenden.
Erhöhen Sie die Anzahl der verfügbaren Festplattenspindeln (und verringern Sie dadurch die Suchbelastung), indem Sie entweder Dateien auf anderen Festplatten symbolisch verknüpfen oder das Striping verwenden:
Symbolische Verknüpfungen
Sie verknüpfen die Index- und Datendateien von
MyISAM
-Tabellen von ihren normalen
Positionen im Datenverzeichnis aus auf eine andere
Festplatte (für die zudem das Striping angewendet werden
kann). Hierdurch werden Such- und Lesezeiten verkürzt
(vorausgesetzt, die Festplatte wird nicht noch für andere
Zwecke verwendet). Siehe auch
Abschnitt 7.6.1, „Symbolische Verknüpfungen“.
Striping bedeutet, dass Sie viele Festplatten haben und
den ersten Block auf der ersten Festplatte, den zweiten
Block auf der zweiten und den
N
-ten Block auf der Festplatte
mit der Nummer
ablegen. Wenn Ihre normale Datengröße also geringer ist
als die Stripe-Größe (oder perfekt angepasst ist), dann
erhalten Sie eine wesentlich bessere Performance. Das
Striping hängt sehr stark vom Betriebssystem und der
Stripe-Größe ab. Insofern sollten Sie Benchmark-Tests
Ihrer Anwendung mit verschiedenen Stripe-Größen
durchführen. Siehe auch
Abschnitt 7.1.5, „Wie Sie Ihre eigenen Benchmarks benutzen“.
N
MOD
number_of_disks
Der Geschwindigkeitsunterschied für das Striping hängt in erheblichem Maße von den Parametern ab. Je nachdem, wie Sie Ihre Striping-Parameter einstellen und über wie viel Festplatten Sie verfügen, können die Unterschiede mehrere Größenordnungen betragen. Sie müssen sich entscheiden, ob Sie die Optimierung für den wahlfreien oder den sequenziellen Zugriff durchführen wollen.
Aus Gründen der Zuverlässigkeit sollten Sie RAID 0+1
(Striping plus Spiegelung) verwenden, allerdings benötigen
Sie in diesem Fall 2 × N
Laufwerke, um N
Laufwerke mit Daten
aufzunehmen. Dies ist die wahrscheinlich beste Option, sofern
Sie über das nötige Kleingeld verfügen. Allerdings müssen
Sie unter Umständen in eine Volumeverwaltungssoftware
investieren, um ein solches Setup effizient steuern zu
können.
Empfehlenswert ist auch der Ansatz, den RAID-Level
entsprechend der Wichtigkeit der Daten zu variieren. So
können Sie etwa Daten moderater Wichtigkeit, die sich
wiederherstellen lassen, auf einer RAID-0-Festplatte
speichern, wirklich wichtige Daten (z. B. Hostinformationen
und Logdateien) hingegen auf einer RAID 0+1- oder einer
RAID-N
-Festplatte ablegen. RAID
N
kann problematisch werden, wenn
Sie viele Schreibvorgänge haben, da die Aktualisierung der
Paritätsbits zeitaufwändig werden kann.
Unter Linux können Sie deutlich mehr Leistung erzielen, indem
Sie die Schnittstelle Ihrer Festplatte mit
hdparm
konfigurieren. (Bis zu 100 Prozent
unter Last sind nicht ungewöhnlich.) Die folgenden
hdparm
-Optionen sollten für MySQL – und
auch für viele andere Anwendungen – recht gut geeignet
sein:
hdparm -m 16 -d 1
Beachten Sie, dass, wenn Sie diesen Befehl verwenden, Leistung
und Zuverlässigkeit von Ihrer Hardware abhängen; aus diesem
Grund empfehlen wir Ihnen dringend, Ihr System nach der
Verwendung von hdparm
umfassend zu testen.
Weitere Informationen entnehmen Sie der
hdparm
-Manpage. Die unvorsichtige
Verwendung von hdparm
kann zu Schäden am
Dateisystem führen! Erstellen Sie deswegen immer ein Backup,
bevor Sie zu experimentieren beginnen.
Ferner können Sie die Parameter für das von der Datenbank verwendete Dateisystem einstellen:
Wenn Sie nicht wissen müssen, wann zuletzt auf die Dateien
zugegriffen wurde (was bei einem Datenbankserver eigentlich
auch nicht wichtig ist), dann können Sie Ihre Dateisysteme
mit der Option -o noatime
einbinden.
Hierdurch werden Updates bis zum letzten Zugriffszeitpunkt in
Inoden auf dem Dateisystem übersprungen, wodurch einige
Suchvorgänge auf der Festplatte unnötig werden.
Bei vielen Betriebssystemen können Sie für ein Dateisystem
eine asynchrone Aktualisierung konfigurieren; hierzu binden
Sie es mit der Option -o async
ein. Wenn Ihr
Computer ausreichend stabil ist, sollten Sie auf diese Weise
mehr Performance erhalten, ohne zu viel Zuverlässigkeit zu
opfern. (Unter Linux ist dieses Flag standardmäßig aktiv.)
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.