Heim > Datenbank > MySQL-Tutorial > Hauptteil

So aktivieren Sie das langsame Abfrageprotokoll in MySQL

PHPz
Freigeben: 2023-04-20 11:29:42
Original
7975 Leute haben es durchsucht

Um die Abfragegeschwindigkeit und -effizienz im täglichen Gebrauch der MySQL-Datenbank zu verbessern, verwenden wir normalerweise Indizes und Optimierer. Aber manchmal müssen wir auch die spezifische Ausführung der Abfrageanweisung kennen, um das Problem besser zu finden und die Datenbank genauer zu optimieren. Zu diesem Zeitpunkt müssen Sie die Slow Query Log-Funktion von MySQL verwenden.

Das langsame Abfrageprotokoll kann alle SQL-Anweisungen aufzeichnen, deren Ausführungszeit einen bestimmten Schwellenwert überschreitet, damit wir Fehler beheben und optimieren können. In diesem Artikel wird erläutert, wie Sie das langsame Abfrageprotokoll in der MySQL-Datenbank aktivieren, und die relevanten Parameter und Optimierungsmethoden des langsamen Abfrageprotokolls werden ausführlich erläutert.

1. Langsames Abfrageprotokoll aktivieren

  1. Konfigurationsdatei ändern

In der MySQL-Konfigurationsdatei my.cnf oder Fügen Sie die folgende Konfiguration zu my.ini hinzu:

slow_query_log = 1 #开启慢查询日志
slow_query_log_file = /var/log/mysql/mysql-slow.log #日志文件路径
long_query_time = 3 #超过3s即为慢查询
log_queries_not_using_indexes = 1 #记录未使用索引的查询
Nach dem Login kopieren

wobei slow_query_log = 1 das Einschalten des langsamen Abfrageprotokolls bedeutet, slow_query_log_file den Pfad und Namen der langsamen Abfrageprotokolldatei angibt, long_query_time bedeutet, wie viele Sekunden die Die Ausführungszeit der Abfrage ist überschritten, bevor sie berücksichtigt wird. Es handelt sich um eine langsame Abfrage. log_queries_not_using_indexes gibt an, ob Abfragen aufgezeichnet werden sollen, die keine Indizes verwenden.

  1. Verwenden Sie den SET-Befehl, um die Konfiguration dynamisch zu ändern.

Zusätzlich zur Änderung der Konfigurationsdatei können wir auch Parameter über SET dynamisch ändern Befehl. Beispielsweise können wir das langsame Abfrageprotokoll in der MySQL-Befehlszeile mit der folgenden Anweisung aktivieren:

mysql> SET global slow_query_log = 1;
mysql> SET global slow_query_log_file = '/var/log/mysql/mysql-slow.log';
mysql> SET global long_query_time = 3;
mysql> SET global log_queries_not_using_indexes = 1;
Nach dem Login kopieren

Im obigen Code bedeutet SET global, dass es global wirksam wird, also für alle Verbindungen wird diese Parameter verwenden.

Wenn Sie nur die Parameter einer lokalen Verbindung festlegen möchten, können Sie natürlich den Befehl SET SESSION verwenden. Zum Beispiel:

mysql> SET SESSION slow_query_log = 1;
mysql> SET SESSION slow_query_log_file = '/var/log/mysql/mysql-slow.log';
mysql> SET SESSION long_query_time = 3;
mysql> SET SESSION log_queries_not_using_indexes = 1;
Nach dem Login kopieren

2. Optimieren Sie die Konfigurationsparameter des langsamen Abfrageprotokolls

  1. slow_query_log_file

Bevor Sie das einschalten Bei einer langsamen Protokollabfrage müssen wir sicherstellen, dass das Verzeichnis, in dem sich die angegebene Protokolldatei befindet, bereits vorhanden ist und über Schreibberechtigungen verfügt. Wenn das Verzeichnis nicht existiert, müssen Sie es zuerst erstellen.

Mit dem folgenden Befehl können wir das aktuelle Arbeitsverzeichnis des MySQL-Prozesses anzeigen:

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
Nach dem Login kopieren

Wie Sie dem obigen Beispiel entnehmen können, ist das Arbeitsverzeichnis des MySQL-Prozesses ist /var/lib/mysql/, und im Protokollverzeichnis dieses Verzeichnisses befindet sich eine slow.log-Datei. Wenn wir also das langsame Abfrageprotokoll in diese Datei schreiben möchten, müssen wir nur die folgende Konfiguration zu my.cnf hinzufügen:

slow_query_log_file = /var/lib/mysql/logs/slow.log
Nach dem Login kopieren
  1. long_query_time
# Der Standardwert von 🎜🎜#long_query_time beträgt 10 Sekunden, was bedeutet, dass nur Abfrageanweisungen, deren Ausführung länger als 10 Sekunden dauert, im langsamen Abfrageprotokoll aufgezeichnet werden. Unter normalen Umständen kann diese Zeit etwas länger sein. Wir können die Zeit basierend auf den tatsächlichen Bedingungen auf eine kürzere Zeit einstellen, um langsame Abfragen schneller zu erkennen.

Der Grund für die lange Ausführung von Abfrageanweisungen liegt häufig darin, dass die Anweisung selbst ineffizient ist und normalerweise optimiert werden muss. Bei der tatsächlichen Verwendung können wir die Zeit von long_query_time schrittweise verkürzen, um weniger effiziente Anweisungen zu erkennen, sie zu optimieren und die Abfrageeffizienz zu verbessern.

    log_queries_not_using_indexes
Wenn der Parameter log_queries_not_using_indexes auf 1 gesetzt ist, werden alle Abfragen protokolliert, die ohne Verwendung von Indizes ausgeführt werden. Dies kann uns helfen, potenzielle Probleme zu erkennen und rechtzeitig zu optimieren. Es können jedoch einige Fehlalarme zurückbleiben, da es Fälle gibt, in denen Abfragen ohne Indizes normal sind.

Sie müssen vorsichtig sein, wenn Sie den Parameter log_queries_not_using_indexes verwenden. Es wird empfohlen, ihn nicht als globale Variable festzulegen. Sie können ihn bei Bedarf dynamisch festlegen. Denn wenn dieser Parameter immer aktiviert ist, kann er sich negativ auf die Leistung von MySQL auswirken und zu einer Verringerung der Gesamtbetriebseffizienz der Datenbank führen.

3. Anzeigen und Analysieren des langsamen Abfrageprotokolls

Wenn wir das langsame Abfrageprotokoll aktivieren, beginnt MySQL, alle Abfrageanweisungen aufzuzeichnen, deren Ausführungszeit den Schwellenwert überschreitet. Wir können den folgenden Befehl verwenden, um das Protokoll für langsame Abfragen anzuzeigen:

mysql> SHOW VARIABLES LIKE 'slow_query_log_file';
+---------------------+------------------------+
| Variable_name       | Value                  |
+---------------------+------------------------+
| slow_query_log_file | /var/lib/mysql/slow.log |
+---------------------+------------------------+
1 row in set (0.00 sec)
Nach dem Login kopieren
Wie aus der obigen Ausgabe ersichtlich ist, lautet der aktuelle Pfad für die Protokolldatei für langsame Abfragen /var/lib/mysql/slow.log.

Wenn Sie den spezifischen Inhalt im langsamen Abfrageprotokoll anzeigen möchten, können Sie den folgenden Befehl verwenden:

mysql> mysqldumpslow -s t /var/lib/mysql/slow.log
Nach dem Login kopieren
Unter diesen bedeutet -s Sortieren nach Zeit und - t bedeutet, dass nur die Top-10-Datensätze angezeigt werden. Wenn Sie alle Abfragedatensätze anzeigen möchten, können Sie den Parameter -t entfernen.

4. Langsame Abfrageprotokolle optimieren

Die Aktivierung langsamer Abfrageprotokolle ist eine sehr gute Möglichkeit, uns dabei zu helfen, Leistungsprobleme zu erkennen und zu optimieren. Bei der tatsächlichen Verwendung müssen Sie jedoch auch auf die folgenden Punkte achten:

    Die Größe der Protokolldatei für langsame Abfragen nimmt weiter zu und muss daher regelmäßig bereinigt werden. Es wird empfohlen, max_slowlog_size in my.cnf auf einen geeigneten Wert zu setzen, um zu vermeiden, dass der Speicherplatz knapp wird.
  1. Die Protokollierung langsamer Abfrageprotokolle wirkt sich negativ auf die MySQL-Leistung aus. Daher wird empfohlen, die Protokollierung nur in einer Produktionsumgebung zu aktivieren, wenn dies erforderlich ist. Legen Sie normalerweise die Protokollebene fest und zeichnen Sie nur Schlüsselinformationen auf.
  2. Sie können Tools verwenden, um langsame Abfrageprotokolle zu analysieren, z. B. pt-query-digest usw. Mithilfe dieser Tools können wir die Ursachen langsamer Abfragen besser ermitteln und Ausführungspläne optimieren.
Kurz gesagt, es ist eine gute Angewohnheit, das MySQL-Protokoll für langsame Abfragen zu aktivieren. In einer Produktionsumgebung müssen wir Parameter sorgfältig konfigurieren und entsprechende Tools verwenden, um die Leistung und Stabilität der Datenbank sicherzustellen.

Das obige ist der detaillierte Inhalt vonSo aktivieren Sie das langsame Abfrageprotokoll in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage