Teil 6: MySQL 4 - Tunig-Möglichkeiten für Admins

SQL-Optimierung: Server richtig konfigurieren

07.10.2008 von Paul DuBois
Für eine wirklich schnelle SQL-Datenbank ist die richtige Konfiguration des SQL-Servers und der darunter liegenden Hardware entscheidend. Im letzen Teil unserer Serie zur Datenbank-Optimierung geben wir Tipps speziell für den Administrator.

Die bisherigen Teile der Artikelreihe haben Optimierungen beschrieben, die von normalen MySQL-Benutzern beim Anlegen und Indizieren von Tabellen vorgenommen werden. Es gibt aber auch Optimierungen, die nur von Systemadministratoren vorgenommen werden können, die die Kontrolle über den MySQL-Server oder den Rechner haben, auf dem er ausgeführt wird. Einige Serverparameter wirken sich direkt auf die Anfrageverarbeitung aus und können nach Bedarf eingestellt werden, und bestimmte Aspekte der Hardwarekonfiguration haben direkten Einfluss auf die Verarbeitungsgeschwindigkeit von Anfragen.

Bei der Durchführung administrativer Optimierungen sollten die folgenden Grundprinzipien beachtet werden:

In den folgenden Abschnitten werden Sie sehen, wie Sie diese Prinzipien anwenden können.

MySQL4: Konfiguration, Administration und Entwicklung

Unsere neue Serie zur Optimierung von MySQL-Anfragen basiert auf Kapitel 4 “Optimierung von Anfragen“ des Standardwerks „MySQL 4 – Konfiguration, Administration und Entwicklung“ von Paul Dubois aus dem SAMS-Verlag. Weitere MySQL-Bücher und eBooks auch von Paul Dubois finden Sie in unserem Partner-Buchshop bei informit.de.

Artikelserie

Teil 1: SQL-Optimierung: Indizes richtig einsetzen

Teil 2: SQL-Optimierung: Indexnutzung in Queries manuell steuern

Teil 3: SQL-Optimierung: Tabellen und Spalten anpassen

Teil 4: SQL-Optimierung: Daten effizient in Tabellen einfügen

Teil 5: SQL-Optimierung: Manuelles Priorisieren und Sperren

Teil 6: SQL-Optimierung: Server richtig konfigurieren

Serverparameter

Der Server hat mehrere Parameter (Variablen), die Sie ändern können, um seinen Betrieb zu beeinflussen. Die wichtigsten Parameter sind die Größen des Tabellencaches und des Caches, der von den Tabellen-Handlern für Indizierungsoperationen verwendet wird.

Wenn Sie genug Speicher zur Verfügung haben, weisen sie ihn den Cachepuffern des Servers zu, um mehr Daten im Speicher zu halten und die Festplattenaktivitäten zu reduzieren. Dies ist von Vorteil, weil der Zugriff auf Daten im Speicher viel schneller ist als der Zugriff auf die Festplatte.

Der Tabellencache nimmt Informationen zu geöffneten Tabellen auf. Seine Größe wird mithilfe der Servervariablen table_cache gesteuert. Greift der Server auf viele Tabellen zu, dann wird dieser Cache gefüllt, und der Server muss Tabellen, die eine Zeit lang nicht verwendet wurden, schließen, um Platz zum Öffnen neuer Tabellen zu schaffen. Durch Überprüfen des Statusindikators Opened_tables können Sie ermitteln, wie effizient der Tabellencache ist:

SHOW STATUS LIKE ‘Opened_tables’;

Opened_tables gibt an, wie oft eine Tabelle geöffnet werden musste, weil sie zum gewünschten Zeitpunkt nicht geöffnet war (der Wert wird auch als Opens in der Ausgabe des Befehls mysqladmin status angezeigt). Ist die Zahl stabil oder leicht ansteigend, dann haben Sie wahrscheinlich einen geeigneten Wert gewählt. Nimmt der angezeigte Wert hingegen schnell zu, dann bedeutet dies, dass der Cache voll ist und Tabellen geschlossen werden müssen, damit andere Tabellen geöffnet werden können. Wenn Dateideskriptoren vorhanden sind, können Sie durch Erhöhen der Tabellencachegröße die Anzahl der Öffnungsoperationen für Tabellen verringern.

Weitere Servervariablen

Ändern der Parameter

Halten Sie sich an die folgenden Regeln, wenn Sie die Parameter von Servereinstellungen ändern:

Andere Strategien zur Optimierung

Es gibt noch andere Strategien, mit deren Hilfe Sie den Serverbetrieb optimieren können:

Der Anfragecache

Seit MySQL 4.0.1 kann der Server zur Beschleunigung wiederholt ausgeführter SELECT-Anweisungen einen Anfragecache verwenden. Die hiermit zu erzielende Leistungssteigerung ist oft dramatisch. Der Anfragecache funktioniert wie folgt:

Unterstützung

Die Unterstützung des Anfragecaches ist standardmäßig implementiert. Wollen Sie den Cache hingegen nicht nutzen, um den damit verbundenen – minimalen! – Ressourcenmehrbedarf zu umgehen, dann können Sie den Server ohne diese Unterstützung kompilieren, indem Sie das configure-Script mit der Option -- without-query-cache ausführen.

Bei Servern mit Anfragecacheunterstützung wird der Cachebetrieb von den Werten dreier Variablen gesteuert:

Caching-Eigenschaften

Die einzelnen Clients verwenden zunächst immer die Caching-Eigenschaften, die als Standard vom Server vorgegeben sind. Mit der folgenden Anweisung können Sie bei einem Client die Art und Weise ändern, wie seine Anfragen durch den Server gespeichert werden:

SET SQL_QUERY_CACHE_TYPE = value;

wert kann – entsprechend der Werte für die Variable query_cache_type – die Werte 0, 1 oder 2 annehmen. Synonym zu diesen lassen sich außerdem die Schlüsselwörter OFF, ON und DEMAND verwenden.

Ein Client kann das Caching einzelner Anfragen auch steuern, indem er dem Schlüsselwort SELECT einen Modifikator nachstellt. Ist das gezielte Caching aktiviert, dann wird eine Anfrage durch Einleitung mit SELECT SQL_CACHE im Cache abgelegt; SELECT SQL_NO_CACHE hingegen bewirkt, dass eine Anfrage nicht gespeichert wird.

Die Unterdrückung des Cachings kann bei Anfragen sinnvoll sein, die Informationen aus einer sich fortwährend ändernden Tabelle abrufen. In diesem Fall wird der Cache wohl kaum von großem Nutzen sein. Angenommen, Sie protokollieren Anfragen an Ihren Webserver in eine MySQL-Tabelle und setzen außerdem regelmäßig einen Satz von Übersichtsanfragen an diese Tabelle ab.

Bei einem normal beschäftigten Webserver werden häufig neue Zeilen in die Tabelle eingefügt, weswegen alle Anfrageergebnisse, die für diese Tabelle im Cache gespeichert würden, schnell ungültig würden. Zwar werden die Übersichtsanfragen wiederholt abgesetzt, aber die Wahrscheinlichkeit, dass diese Anfragen vom Cache profitieren können, ist doch eher gering. Unter diesen Umständen sollten Sie die Anfragen mit dem Modifikator SQL_NO_CACHE versehen, um dem Server mitzuteilen, dass er die Ergebnisse nicht im Cache abzulegen braucht.

Hardwarefragen

Bislang haben wir in diesem Abschnitt Methoden zur Verbesserung der Serverleistung beschrieben, ohne die Hardware zu erwähnen. Sie können natürlich bessere Hardware kaufen, um Ihren Server zu beschleunigen, aber nicht alle hardwareseitigen Änderungen sind gleichermaßen sinnvoll. Wenn Sie wissen wollen, welche Verbesserungen Sie bei der Hardware ins Auge fassen sollen, beachten Sie auch hier die gleichen Grundprinzipien wie bei der Optimierung der Serverparameter: Legen Sie so viele Daten wie möglich in schnellem Arbeitsspeicher ab, und lassen Sie sie so lange wie möglich dort.

Es gibt bei der Hardwarekonfiguration mehrere Aspekte, die im Hinblick auf die Verbesserung der Serverleistung geändert werden können:

Festplattenaktivität verteilen

Bevor Sie Daten auf ein anderes Gerät verschieben, sollten Sie sich mit den Ladeeigenschaften Ihres Systems vertraut machen. Wenn bereits eine andere wichtige Aktivität auf einem bestimmten Gerät stattfindet, könnte das Ablegen der Datenbank auf diesem Gerät die Performance verschlechtern. Beispielsweise ist kein erkennbarer Vorteil zu erzielen, wenn Sie sehr viel Webverkehr verarbeiten und eine Datenbank auf das Gerät verlagern, auf dem sich das Dokumentenverzeichnis Ihres Webservers befindet (wenn Sie nur ein einziges Laufwerk haben, können Sie natürlich nicht viel Festplattenaktivität umverteilen).

Der Einsatz von RAID-Geräten kann ebenfalls zu Zeit- und Performance-Gewinnen durch parallelen Hardwareeinsatz führen.

Ausblick

Mit diesem Artikel endet unsere Serie zur Optimierung von MySQL-Anfragen. Weitere Information rund um Datenbanken und deren Optimierung finden Sie in unserer Rubrik Server/Datenbank. (mzu)

MySQL4: Konfiguration, Administration und Entwicklung

Unsere neue Serie zur Optimierung von MySQL-Anfragen basiert auf Kapitel 4 “Optimierung von Anfragen“ des Standardwerks „MySQL 4 – Konfiguration, Administration und Entwicklung“ von Paul Dubois aus dem SAMS-Verlag. Weitere MySQL-Bücher und eBooks auch von Paul Dubois finden Sie in unserem Partner-Buchshop bei informit.de.

Artikelserie

Teil 1: SQL-Optimierung: Indizes richtig einsetzen

Teil 2: SQL-Optimierung: Indexnutzung in Queries manuell steuern

Teil 3: SQL-Optimierung: Tabellen und Spalten anpassen

Teil 4: SQL-Optimierung: Daten effizient in Tabellen einfügen

Teil 5: SQL-Optimierung: Manuelles Priorisieren und Sperren

Teil 6: SQL-Optimierung: Server richtig konfigurieren