Ich bin es gewohnt, einen Showplan in Microsoft SQL zu haben, und bin faul geworden, Tools zum Optimieren von MySQL-Abfragen zu verwenden. Wie kann ich physische / logische E / A für eine Abfrage in MySQL ermitteln? (EXPLAIN zeigt die Indexauswahl an, aber ich möchte, wenn möglich, weitere Informationen vom MySQL-Server).
mysql
performance
query
David Hall
quelle
quelle
Antworten:
Ich empfehle die Verwendung von Percona Server für die Verbesserungen des langsamen Abfrageprotokolls. Ich habe einen ähnlichen Thread zu Stack Overflow beantwortet:
/programming/3393206/what-is-the-equivalent-query-in-mysql/3443944#3443944
Schauen Sie sich dies insbesondere an (von http://www.percona.com/docs/wiki/percona-server:features:slow_extended?redirect=1#changes_to_the_log_format ):
quelle
Sie können die Abfrageleistung anhand der Anzahl der Festplattensuchen abschätzen.
Im Abschnitt " Optimierung" des MySQL-Handbuchs wird eine der nützlicheren Methoden zum Schätzen von E / A und nachfolgenden Optimierungsanforderungen erläutert. Wenn Sie die Anzahl der Lesevorgänge untersuchen und die Hardware-E / A schätzen, sollten Sie einen ziemlich klaren Hinweis auf die Anforderungen für den Festplattenzugriff erhalten. Durch Anpassen der Puffergrößen können Sie außerdem die Auswirkungen von Speicher und Caching auf Ihre Abfrage erkennen.
quelle
Es ist nicht perfekt, aber Sie sollten es können
Die Anzahl der physischen Lesevorgänge finden Sie am
Innodb_buffer_pool_reads
Zähler und die Anzahl der logischen LesevorgängeInnodb_buffer_pool_read_requests
. Um nützlich zu sein, müssten Sie diese Zahlen notieren, dann eine repräsentative Arbeitslast ausführen und dann die Anzahl der logischen Lesevorgänge teilen, um logische Lesevorgänge pro Abfrage zu finden. Wenn Sie Glück haben, erhöht sich die Anzahl der physischen Lesevorgänge zu Beginn Ihres Testlaufs und bleibt dann konstant.quelle
Mit etwas Arbeit können Sie sehen, wie viel "Arbeit" Ihre Abfrage kostet.
Nun, das gibt Ihnen nicht die zwischengespeicherten und nicht zwischengespeicherten Antworten, aber es gibt Ihnen einige interessante Hinweise.
Leider sind die InnoDB-STATUS global. Sie müssen sie also vorher und nachher erfassen. Schlimmer noch, andere Abfragen werden auch die Werte stoßen.
Mein Mantra "Count the Disk Hits".
quelle