MySQL log_slow_queries
Es ist leichter langsame Query zu identifizieren als herauszufinden warum sie so langsam sind. MySQL bietet die Möglichkeit diese Querys in eine Logdatei zu schreiben.
MySQL Konfiguration
log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 3
Das war’s schon. Mit log_slow_queries sagen wir MySQL wo es die Querys loggen soll die mehr Zeit in Anspruch nehmen als long_query_time.
Hier ein Beispiel:
# Time: 080806 6:25:03 # User@Host: user1[user1] @ localhost [] # Query_time: 12 Lock_time: 0 Rows_sent: 3656 Rows_examined: 468321 USE tabelle; SELECT sp1, sp2 FROM t1 WHERE sp3 = sp2;
An diesem Beispiel lässt sich erkennen das über 450.000 Zeilen in der Tabelle t1 durchsucht und über 3500 Zeilen an den User zurück gesandt wurden. Dabei ist klar was 12 Sekunden gedauert hat. Hier kann davon ausgegangen werden das Indizes falsch gesetzt wurden.
Querys welche in dieser Logdatei stehen müssen keine schlechten oder gar langsamen Querys sein, es bedeutet nur das zu diesem Zeitpunkt die Query sehr viel Zeit in anspruch nahm, was nicht heißt das sie in Zukunft auch so viel Zeit benötigt.
Hier ein Paar Gründe warum ein Query zu einer bestimmten Zeit langsam ist.
- Die Tabelle war gesperrt und deshalb musste gewartet werden.
- Die Query wurde noch nicht gecached.
- Es wurde ein Backup gemacht, welche die Festplatte sehr beansprucht hatte.
- Der Server beantwortete hunderte von anderen Anfragen, welshalb zu diesem Zeitpunkt einfach nicht mehr CPU zur Verfügung stand.
