PHP Blogger

Startseite Schreib mir ne Mail! RSS Abo Webnews

Wo ist meine MySQL Performance?

Kennen wir das nicht alle? Wir schreiben eine super Webanwendung, nur um dann festzustellen, dass nach einer Weile die Seite immer langsamer wird? Wir optimieren die Performance bis zum geht nicht mehr, testen alle möglichen Funktionen, nur um dann festzustellen, dass das Problem in zu langsamen Antworten vom Datenbank-Server liegt.

Das muss man auch schneller rausfinden können und tatsächlich, mir hat sich wieder eine neue Welt geöffnet.

log-slow-queries = "/VERZEICHNIS/log/mysql.log"
log-queries-not-using-indexes = 1

Wobei die Slow Queries als Standard länger als 10 Sekunden dauern, kann aber über die Variable “long_query_time" gesteuert werden.

Nun werden zum einen Anfragen, die sehr lange dauern geloggt, aber viel interessanter fand ich die Option mit den Indexen. Nun kann ich nämlich sehen, welche Anfragen besonders viele Einträge in meiner Datenbank lesen müssen (sog. Full Table Scans), bevor eine Antwort gegeben werden kann. Und wenn man dann feststellt, dass für jedes Bild, was auf der Seite angezeigt wird, die gesamte Tabelle mit 5000 Einträgen eingelesen wird, dann sagt die Bildergallerie schon mal “Gute Nacht”.

Ähnliche Artikel:

  1. MySql Performance steigern
  2. Performance: MySQL Result-Sets auslesen
  3. Objektorientierung vs. Performance
  4. Performance durch PHP Benchmarks
  5. Linktipps: Performance und Produktivität

Christian meint dazu:

16. Oktober 2008 um 07:30

Falls man dann schon das ganze auf die Abfragen eingegrenzt hat, ist es auch mal interressant sich die SQL-Querys via Explain Plan anzusehen…
Explain ‘SQL-Abfrage’;

Erfolgreichster deutscher PHP Blog? | PHP hates me - Der PHP Blog meint dazu:

16. Oktober 2008 um 08:06

[...] PHP Blogger - Rang 105687 [...]

loci meint dazu:

16. Oktober 2008 um 08:49

auf
http://www.percona.com/percona-lab.html
gibts dann noch den microslow-innodb patch mit dem sich slow queries nicht nur in sekunden, sondern auch in millisekunden steuern lassen. auf einem ordentlichen db-server gut gutem db-layout muss es ja schon fast mit dem teufel zugehen um eine sekunde query time zu erreichen…

Lustige Videos meint dazu:

16. Oktober 2008 um 15:48

Danke für den Tipp, werde das gleich mal ausprobieren. Meine Seite ist auch öfters mal ziemlich lahm, vielleicht komme ich ja hierüber der Ursache auf den Grund!

Thorsten meint dazu:

20. Oktober 2008 um 13:16

Hey. Und wie führe ich das ganze aus?

phil meint dazu:

20. Oktober 2008 um 19:48

@Thorsten,

das ganze führst du ganz normal mit Aufrufen auf deine Seite aus. Das wunderbare ist, dass das Logfile für jede relevante Query geführt wird. Also bsp. hat dein Skript 10 Datenbankabfragen und 2 benutzen keine Indexe und dann werden in dem Logfile 2 Queries auftauchen und zwar genau in der SQL Syntax, die du abgeschickt hast.

PHP Coder meint dazu:

21. Oktober 2008 um 06:38

Datenbankperformance ist echt eine problematische Sache, über die man selten hilfreiches findet. Dabei hab ich schon so manches graue Haar bekommen. Danke für deinen guten Tipp!

Thorsten meint dazu:

24. Oktober 2008 um 00:33

@Phil: Danke. Aber sorry, ich bin da leider nicht so fit daher frage ich nochmal genau nach. Ich führe also einfach ein query aus?

mysql_query(’log-slow-queries = “/VERZEICHNIS/log/mysql.log”‘)
mysql_query(’log-queries-not-using-indexes = 1′)

Ich schätze damit liege ich falsch oder?

phil meint dazu:

24. Oktober 2008 um 00:37

Ach so…

Sorry, ich habe deine Frage nicht ganz richtig verstanden gehabt. Du brauchst sowieso Zugang zum Server, um auf die Logfiles zugreifen zu können, deshalb ist es am einfachsten, wenn du die beiden Befehle in die my.ini Konfigurationsdatei von MySQL schreibst. Danach den DB-Server neu starten und dann machst du Queries in deinen Skripten und es wird gelogt. Ich hoffe das ist verständlicher?!

Viele Grüße

kidata meint dazu:

28. Oktober 2008 um 10:07

Sehr hilfreich ist auch in phpMyAdmin (Startseite) die Funktion “MySQL-Laufzeit-Informationen anzeigen” - dort einfach mal nach roten Werten Ausschau halten und die entsprechenden Werte in der my.ini anpassen. Geht natürlich auch nur wenn man Zugriff auf den Server hat, aber es lassen sich damit z.T. gravierende Performancesteigerungen erreichen, da die MySQL-Standard-Konfiguration nicht für größere Datenbanken mit mehreren 100.000 Datensätzen ausgelegt ist.

Thorsten meint dazu:

28. Oktober 2008 um 19:46

Danke phil!

Phil meint dazu:

3. November 2008 um 15:15

Thx!

Webdesign Berlin meint dazu:

12. April 2009 um 02:36

Um die MySQL Performance zu steigern, nutze ich immer das Tool “Leeren des Tabellenchaches (”FLUSH”) ” in phpmyadmin.

Des weiteren ist darauf zu achten, dass jede geöffnete Datenbankverbindung wieder geschlossen wird.

Um mehr zum Thema “Steigerung der MySQL Performance” zu erfahren, kann ich euch das Buch “High Performance MySQL” empfehlen.

Thomas meint dazu:

5. August 2009 um 14:47

Danke, für den tollen Beitrag. Du sprichst mir mit deiner Einleitung aus der Seele. Geht leider viel zu oft so…

RSS für Kommentare zu diesem Artikel · TrackBack URI

Schreib Deine Meinung