Analyse des allgemeinen MySQL-Abfrageprotokolls und des langsamen Abfrageprotokolls

Analyse des allgemeinen MySQL-Abfrageprotokolls und des langsamen Abfrageprotokolls

Die Protokolle in MySQL umfassen: Fehlerprotokoll, Binärprotokoll, allgemeines Abfrageprotokoll, Protokoll für langsame Abfragen usw. Hier stellen wir hauptsächlich zwei häufig verwendete Funktionen vor: allgemeines Abfrageprotokoll und langsames Abfrageprotokoll.

1. Allgemeines Abfrageprotokoll: zeichnet die hergestellten Clientverbindungen und ausgeführten Anweisungen auf.

2. Langsames Abfrageprotokoll: zeichnet alle Abfragen auf, deren Ausführung länger als longquerytime Sekunden dauert oder die keine Indizes verwenden

1. Allgemeines Abfrageprotokoll

Wenn Sie allgemeine Protokollabfragen lernen, müssen Sie die gemeinsamen Befehle in den beiden Datenbanken kennen:

1) show variables like '%general%';

Sie können überprüfen, ob die aktuelle allgemeine Protokollabfrage aktiviert ist. Wenn der Wert von general_log ON ist, ist sie aktiviert; wenn er OFF ist, ist sie deaktiviert (standardmäßig ist sie deaktiviert).

2) show variables like '%log_output%';

Zeigen Sie das aktuelle Ausgabeformat des langsamen Abfrageprotokolls an. Es kann DATEI (hostname.log in der Datendatei der Datenbank gespeichert) oder TABELLE (mysql.general_log in der Datenbank gespeichert) sein.

Frage: Wie aktiviere ich das allgemeine MySQL-Abfrageprotokoll und wie stelle ich das Ausgabeformat für das allgemeine Protokoll ein?

Allgemeine Protokollabfrage aktivieren: set global general_log=on;

Allgemeine Protokollabfrage deaktivieren: set global general_log=off;

Stellen Sie die allgemeine Protokollausgabe auf den Tabellenmodus ein: set global log_output='TABLE';

Stellen Sie die allgemeine Protokollausgabe auf den Dateimodus ein: set global log_output='FILE';

Stellen Sie die allgemeine Protokollausgabe auf Tabellen- und Dateimodus ein: set global log_output='FILE,TABLE';

(Hinweis: Der obige Befehl ist nur für den aktuellen Zeitpunkt wirksam. Er wird ungültig, wenn MySQL neu gestartet wird. Wenn er dauerhaft wirksam sein soll, müssen Sie my.cnf konfigurieren.)

Die Konfiguration der Datei my.cnf ist wie folgt:

general_log=1 #1 bedeutet Aktivierung der allgemeinen Protokollabfrage, 0 bedeutet Deaktivierung der allgemeinen Protokollabfrage

log_output=DATEI,TABELLE#Legen Sie das Ausgabeformat des allgemeinen Protokolls auf Datei und Tabelle fest

2. Langsames Abfrageprotokoll

Das MySQL Slow Query Log ist eine Art von Log-Datensatz, der von MySQL bereitgestellt wird. Es wird verwendet, um Anweisungen in MySQL aufzuzeichnen, deren Antwortzeit den Schwellenwert überschreitet. Insbesondere werden SQL-Anweisungen, deren Ausführungszeit den Wert „long_query_time“ überschreitet, im Slow Query Log aufgezeichnet (das Protokoll kann in eine Datei oder eine Datenbanktabelle geschrieben werden. Wenn die Leistungsanforderungen hoch sind, wird das Schreiben in eine Datei empfohlen). Standardmäßig aktiviert die MySQL-Datenbank das langsame Abfrageprotokoll nicht. Der Standardwert von long_query_time ist 10 (d. h. 10 Sekunden, normalerweise auf 1 Sekunde eingestellt), d. h. eine Anweisung, die länger als 10 Sekunden ausgeführt wird, ist eine langsame Abfrageanweisung.

Im Allgemeinen treten langsame Abfragen in großen Tabellen auf (z. B. einer Tabelle mit Millionen von Daten) und die Felder der Abfragebedingungen sind nicht indiziert. Zu diesem Zeitpunkt werden die Felder, die den Abfragebedingungen entsprechen, in der gesamten Tabelle gescannt. Wenn die dafür benötigte Zeit die long_query_time überschreitet, handelt es sich um eine langsame Abfrageanweisung.

Frage: Wie kann ich überprüfen, ob das aktuelle Protokoll für langsame Abfragen aktiviert ist?

Geben Sie den Befehl in MySQL ein:

show variables like '%quer%';

Beherrschen Sie hauptsächlich die folgenden Parameter:

(1) Der Wert von slow_query_log ist ON, um das langsame Abfrageprotokoll zu aktivieren, und OFF, um das langsame Abfrageprotokoll zu deaktivieren.

(2) Der Wert von slow_query_log_file ist die Datei, in der das Slow-Query-Log aufgezeichnet wird (Hinweis: Der Standardname ist hostname.log. Ob das Slow-Query-Log in eine angegebene Datei geschrieben wird, erfordert, dass das Ausgabe-Logformat der Slow-Query als Datei angegeben wird. Der entsprechende Befehl lautet: show variables like '%log_output%'; um das Ausgabeformat anzuzeigen).

(3) long_query_time gibt den Schwellenwert für langsame Abfragen an. Wenn die Ausführungszeit einer Anweisung diesen Schwellenwert überschreitet, wird sie als langsame Abfrageanweisung betrachtet. Der Standardwert beträgt 10 Sekunden.

(4) log_queries_not_using_indexes: Wenn der Wert auf ON gesetzt ist, werden alle Abfragen protokolliert, die keine Indizes verwenden. (Hinweis: Wenn Sie nur log_queries_not_using_indexes auf ON und slow_query_log auf OFF setzen, wird diese Einstellung nicht wirksam. Das heißt, die Voraussetzung für die Wirksamkeit dieser Einstellung ist, dass der Wert von slow_query_log auf ON gesetzt ist.) Normalerweise wird sie während der Leistungsoptimierung vorübergehend aktiviert.

Frage: Das Ausgabeprotokollformat für langsame MySQL-Abfragen auf Datei oder Tabelle oder beides festlegen?

Durch den Befehl: Variablen wie „%log_output%“ anzeigen;

Das Ausgabeformat kann über den Wert von log_output angezeigt werden. Der obige Wert ist TABLE. Natürlich können wir das Ausgabeformat auch auf Text einstellen oder Text und Datenbanktabellen gleichzeitig aufzeichnen. Der einzustellende Befehl lautet wie folgt:

#Langsame Abfrageprotokollausgabe in die Tabelle (dh mysql.slow_log)
Setzen Sie globallog_output='TABELLE'.
#Das langsame Abfrageprotokoll wird nur als Text ausgegeben (d. h. in die durch slow_query_log_file angegebene Datei).
setglobal log_output='DATEI';
#Das langsame Abfrageprotokoll wird gleichzeitig als Text und Tabelle ausgegeben. setglobal log_output='FILE,TABLE';

Analyse des Datenformats im Datentext in der Tabelle des Slow Query Logs:

Das Protokoll langsamer Abfragen wird in der Tabelle myql.slow_log im folgenden Format aufgezeichnet:

Langsame Abfrageprotokolle werden in der Datei hostname.log im folgenden Format aufgezeichnet:

Wie Sie sehen, zeichnen sowohl die Tabelle als auch die Datei die folgenden Informationen auf: Welche Anweisung die langsame Abfrage verursacht hat (sql_text), die Abfragezeit der langsamen Abfrageanweisung (query_time), die Tabellensperrzeit (Lock_time) und die Anzahl der gescannten Zeilen (rows_examined).

Frage: Wie kann ich die Anzahl der aktuell langsamen Abfrageanweisungen abfragen?

In MySQL gibt es eine Variable, die speziell die Anzahl der aktuell langsamen Abfrageanweisungen aufzeichnet:

Geben Sie den Befehl ein: show global status like '%slow%';

(Hinweis: Bei allen oben genannten Befehlen gilt: Wenn die Parameter über die MySQL-Shell festgelegt werden, werden bei einem Neustart von MySQL alle festgelegten Parameter ungültig. Wenn Sie sie dauerhaft wirksam machen möchten, müssen Sie die Konfigurationsparameter in die Datei my.cnf schreiben.)

Zusätzlicher Wissenspunkt: Wie verwende ich das in MySQL integrierte Tool zur Analyse langsamer Abfrageprotokolle, mysqldumpslow, zum Analysieren von Protokollen?

perlmysqldumpslow –sc –t 10 slow-query.log

Die spezifischen Parametereinstellungen sind wie folgt:

-s gibt die Sortiermethode an. c, t, l und r werden jeweils nach der Anzahl der Datensätze, der Zeit, der Abfragezeit und der Anzahl der zurückgegebenen Datensätze sortiert. ac, at, al und ar geben die entsprechende umgekehrte Sortierung an.

-t bedeutet oben und die darauf folgenden Daten geben an, wie viele Datensätze zurückgegeben werden.

Auf -g kann eine Übereinstimmung mit einem regulären Ausdruck folgen, bei dem die Groß-/Kleinschreibung nicht beachtet wird.


Die Bedeutung der obigen Parameter ist wie folgt:

Anzahl: 414 Die Aussage erschien 414 Mal;

Zeit = 3,51 s (1454) Die längste Ausführungszeit beträgt 3,51 s und die gesamte kumulierte Zeit beträgt 1454 s.

Sperre = 0,0 s (0) Die maximale Wartezeit auf die Sperre beträgt 0 s, und die kumulierte Wartezeit auf die Sperre beträgt 0 s.

Zeilen = 2194,9 (9097604) Die maximale Anzahl an Zeilen, die an den Client gesendet werden, beträgt 2194,9, und die Gesamtzahl an Funktionen, die an den Client gesendet werden, beträgt 90976404

(Hinweis: Das Skript mysqldumpslow ist in der Sprache Perl geschrieben. Die spezifische Verwendung von mysqldumpslow wird später erläutert.)

Frage: Woher wissen Sie im eigentlichen Lernprozess, ob die von Ihnen festgelegte langsame Abfrage effektiv ist?

Es ist ganz einfach. Wir können manuell eine langsame Abfrageanweisung generieren. Wenn beispielsweise der Wert unserer langsamen Abfrage log_query_time auf 1 gesetzt ist, können wir die folgende Anweisung ausführen:

selectsleep(1);

Diese Anweisung ist die langsame Abfrageanweisung. Anschließend können Sie überprüfen, ob eine solche Anweisung in der entsprechenden Protokollausgabedatei oder -tabelle vorhanden ist.

Zusammenfassen

Oben habe ich Ihnen das allgemeine MySQL-Abfrageprotokoll und die langsame Abfrageprotokollanalyse vorgestellt. Ich hoffe, es wird Ihnen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken!

Das könnte Sie auch interessieren:
  • So zeigen Sie das MySQL-Fehlerprotokoll an
  • Starten, Stoppen, Neustarten von MySQL und Anzeigen von Fehlerprotokollbefehlen in Ubuntu
  • Ein Beispiel-Tutorial zum Aktivieren und Verwenden des allgemeinen Abfrageprotokolls in MySQL
  • Tutorial zur Verwendung des allgemeinen Abfrageprotokolls in MySQL, um die am häufigsten abgefragten Anweisungen zu finden
  • Detaillierte Analyse des MySQL-Fehlerprotokolls und des allgemeinen Abfrageprotokolls

<<:  So führen Sie SQL-Anweisungen automatisch aus, wenn MySQL in Docker gestartet wird

>>:  Zusammenfassung der 3 kleineren Fehler, die während der Installation von MySQL 8.0 aufgetreten sind

Artikel empfehlen

CSS Sticky Footer-Implementierungscode

Dieser Artikel stellt den Implementierungscode fü...

So verwalten Sie zwischengespeicherte Seiten in Vue

Inhaltsverzeichnis Problem 1: Zerstörung 1. Wie m...

Detaillierte Beschreibung der Unicode-Signatur-BOM

Unicode-Signatur-BOM – Was ist die BOM? BOM ist di...

Kostenloses Tutorial zur Installationskonfiguration der Version MySQL 5.7.18

MySQL wird in eine Installationsversion und eine ...

JS implementiert das Baidu-Suchfeld

In diesem Artikelbeispiel wird der spezifische JS...

TCP-Socket-SYN-Warteschlange und Accept-Warteschlangen-Unterschiedsanalyse

Zunächst müssen wir verstehen, dass ein TCP-Socke...

Grafisches Tutorial zur Installation und Konfiguration der MySQL-Version 8.0.24

Dieser Artikel zeichnet die Installations- und Ko...

jQuery-Plugin zur Implementierung eines gestapelten Menüs

Jeden Tag ein jQuery-Plugin - gestapeltes Menü. Z...

Detaillierte Erklärung des virtuellen DOM und des Diff-Algorithmus in React

Die Rolle des virtuellen DOM Zunächst müssen wir ...

Detaillierte Erklärung des Prinzips und der Funktion des JavaScript-Closures

Inhaltsverzeichnis Einführung Verwendung von Vers...