Messung der tatsächlichen MySQL-Abfragezeit

79

Wie kann ich die Ausführungszeit einer Abfrage messen, ohne die Wartezeit auf eine Sperrfreigabe usw. zu messen? Meine einzige Idee war es, dieselbe Abfrage kontinuierlich zu messen und die schnellste Zeit aufzuzeichnen.

Mikhail
quelle

Antworten:

149

Starten Sie den Profiler mit

SET profiling = 1;

Führen Sie dann Ihre Abfrage aus.

Mit

SHOW PROFILES;

Sie sehen eine Liste der Abfragen, für die der Profiler Statistiken hat. Und schließlich wählen Sie aus, mit welcher Abfrage Sie prüfen möchten

SHOW PROFILE FOR QUERY 1;

oder welche Nummer auch immer Ihre Anfrage hat.

Sie erhalten eine Liste, in der genau angegeben ist, wie viel Zeit während der Abfrage verbracht wurde.

Weitere Infos im Handbuch.

schicke Hose
quelle
Das ist ausgezeichnet! Wissen Sie, ob dies langsam ist? Könnte ich dies meiner Wrapper-Klasse hinzufügen, um es für jede auf meiner Website ausgeführte Abfrage auszuführen?
Mikhail
3
Ich habe nie darüber nachgedacht. Warum willst du das tun? Normalerweise ist dies nur für die Entwicklung, denke ich. Wenn Sie wissen möchten, welche Abfragen langsam sind, schauen Sie in Ihr Slow-Query-Protokoll. dev.mysql.com/doc/refman/5.1/en/slow-query-log.html
FancyPants
Weil Abfragen für verschiedene Benutzer unterschiedlich lange dauern. Slow-Query-Log scheint die Zeit zu zählen, die es auf eine Sperrfreigabe wartet
Mikhail
1
Nicht wirklich wahr. Das Warten auf eine Sperre ist auch nur ein Symbol dafür, dass eine andere Abfrage langsam ist. Ich schlage vor, wählen Sie die Abfragen in Ihrem Slow-Query-Protokoll aus und führen Sie sie mit dem Profiler aus, um zu sehen, wo sie so viel Zeit verbracht haben. Dann, wenn möglich, verbessern Sie sie. Fügen Sie dementsprechend Indizes hinzu, schreiben Sie sie neu oder reduzieren Sie die gelesenen Daten, wenn die Abfrage viel Zeit in Anspruch nimmt sending data. Oder was auch immer nötig ist, um die Leistung zu verbessern. Ich sehe keinen Grund darin, Benutzer wissen zu lassen, warum sie so lange warten müssen. Es ist ihnen eigentlich egal.
FancyPants
Ich wollte den Benutzern die Ergebnisse der Profilerstellung nicht anzeigen. Ich wollte es nur live aufnehmen und für meine eigenen Zwecke speichern
Mikhail
37

Die akzeptierte Antwort wird ungültig ...

SHOW PROFILE[S]sind ab MySQL 5.6.7 veraltet und werden in einer zukünftigen MySQL-Version entfernt. Verwenden Sie stattdessen das Leistungsschema. Siehe http://dev.mysql.com/doc/refman/5.6/en/performance-schema-query-profiling.html

Rick James
quelle
2
Wenn Profile Ihnen etwas Nützlicheres als "Senden von Daten" bietet, gewinnen Sie die Lotterie.
Rick James
1
Ich benutze 5.7.19 und arbeite immer noch show profilesrichtig
Siva Praveen
1
@SivaPraveen - OK, im Moment funktioniert es noch, aber "... wird entfernt ..."
Rick James