ʥ
Ihre Daten sind 100% gesichert und werden verschlüsselt übertragen
ı
ʦ
Wir verwenden Cookies, um Ihnen Inhalte bereitzustellen und ein angenehmeres Surfen zu ermöglichen.
ı

Sie haben den Artikel erfolgreich in den Warenkorb gelegt.
Was möchten Sie als nächstes tun?

Weiter einkaufen Zur Kasse

MySQL Abfragen finden, die keine Indizien nutzen und langsam sind

MySQL KonfigurationEin Paar PHP Seiten zu programmieren, die MySQL nutzen ist keine große Zauberei. Wenn ein Server mit Apache und MySQL erst aufgesetzt wird, so werden automatisierte Einstellungen vorgenommen, die eine stabile Arbeit sicherstellen. Jedoch in Sachen MySQL Skalierbarkeit und viele schwere PHP Projekte gleichzeitig auf dem gleichen Server fahren, muss man sich ernsthaft Gedanken über die Optimierung der MySQL Konfiguration machen.

Ermittlung von langsamen MySQL Abfragen

Wenn viele Seiten gleichzeitig den MySQL Dienst auf Ihrem Server belasten, sollten Sie immer wissen, falls eine Abfrage langsam wird. Leider sind die heutigen Server so schnell, dass man erst gar nicht mehr die langsamen Abfragen erkennen kann, bis die Daten, die abgefragt werden, ziemlich groß sind. Das heißt eine Tabelle mit über 100.000 Zeilen wird mit einem JOIN oder Filter (WHERE) abgefragt.

MySQL bietet eine automatische Speicherung aller Abfragen, die über eine bestimmte Anzahl von Sekunden dauern. Dazu müssten Sie unter /etc/mysql/my.cnf folgende Zeilen einfügen:

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2

Kurze Erläuterung der obigen Einstellungen:

  • Die erste Zeile besagt wo auf dem Server die langsamen Abfragen gespeichert werden. In dem Fall ist das eine Datei bei den anderen MySQL Logs.
  • Die zweite Zeile besagt wie viele Sekunden Zeit muss eine Abfrage übersteigen, um als langsam betrachtet zu werden. Schreiben Sie bitte hier keine 0 rein :) Bei unserem Beispiel haben wir alle Abfragen in der Log-datei, die länger als 2 Sekunden dauern.

Eine andere Frage muss man sich aber sofort stellen - wieso ist eine Abfrage überhaupt langsam? Sehr oft, fast immer, weil keine Indizien eingesetzt werden. Damit kommen wir zum nächsten Punkt.

Finden von MySQL Abfragen, die keine Indizien einsetzen

MySQL Abfragen, die keine Indizien nutzen, erkennen Sie entweder mit dem Befehl EXPLAIN, oder viel einfacher - in dem Sie alle Abfragen ähnlich wie die langsamen Abfragen, in den Log-Dateien aufschreiben lassen. Dies macht man mit einer weiteren Einstellung in der my.cnf Datei, hier die komplette Konfiguration für langsame Abfragen und für Abfragen, die keine Indizien einsetzen:

log_slow_queries = /var/log/mysql/mysql-slow.log
long_query_time = 2
log-queries-not-using-indexes

Das ist alles. Sie müssen nun den MySQL Daemon einmal neu starten (/etc/init.d/mysql restart) und dann ab sofort sehen Sie die Abfragen in der oben genannten Log-Datei.

Falls Sie das selber nicht schaffen oder noch schlimmer - Sie bekommen Ihre Abfragen nicht schneller, so können Sie uns gerne mit der Optimierung Ihres MySQL Servers beauftragen. Wir sind für Sie da.

 

Sedcardsystem | MK1 v8.7.7 | RegNr. 18386 | webdesign Œ
û