Zusammenfassung der MySQL-Slow-Log-Praxis

Zusammenfassung der MySQL-Slow-Log-Praxis

Langsame Protokollabfragefunktion

Die Hauptfunktion der langsamen Protokollabfrage besteht darin, die Abfrageanweisungen in SQL-Anweisungen aufzuzeichnen, die den festgelegten Zeitschwellenwert überschreiten. Beispielsweise setzen wir für eine SQL-Abfrageanweisung den Schwellenwert auf 1 s. Wenn die Ausführungszeit dieser Abfrageanweisung 1 s überschreitet, wird sie in das Konfigurationsprotokoll für langsame Abfragen geschrieben.

Langsame Abfragen dienen uns hauptsächlich dazu, die SQL-Anweisung zu optimieren.

Beschreibung des Konfigurationselements für langsame Abfragen

Melden Sie sich beim MySQL-Dienst an und verwenden Sie den folgenden Befehl

mysql> Variablen wie „%query%“ anzeigen;
+------------------------------+-----------------------------------------+
| Variablenname | Wert |
+------------------------------+-----------------------------------------+
| binlog_rows_query_log_events | AUS |
| ft_query_expansion_limit | 20 |
| habe_Abfragecache | JA |
| lange Abfragezeit | 10.000000 |
| Abfrage-Zuweisungsblockgröße | 8192 |
| Abfrage-Cache-Limit | 1048576 |
| Abfrage-Cache_Mindestressource | 4096 |
| Abfrage-Cache-Größe | 33554432 |
| Abfrage-Cache-Typ | AUS |
| query_cache_wlock_invalidate | AUS |
| Abfrage-Vorzuweisungsgröße | 8192 |
| slow_query_log | AUS |
| slow_query_log_datei | /usr/local/mysql/var/localhost-slow.log |
+------------------------------+-----------------------------------------+
13 Zeilen im Satz (0,01 Sek.)

Hier müssen wir uns nur auf drei Konfigurationselemente konzentrieren.

1.langsames_Abfrageprotokoll

Dieses Konfigurationselement bestimmt, ob die langsame Protokollabfragefunktion aktiviert werden soll. Der Konfigurationswert ist ON oder OFF.

2. langsame Abfrageprotokolldatei

Dieses Konfigurationselement ist eine Aufzeichnungsdatei für langsame Protokollabfragen und muss manuell erstellt werden.

3.lange_Abfragezeit

Dieses Konfigurationselement legt den Zeitschwellenwert für langsame Protokollabfragen fest. Wenn dieser Schwellenwert überschritten wird, wird das langsame Protokoll aufgezeichnet. Der Konfigurationswert ist 0 (alle SQL-Anweisungen werden aufgezeichnet) oder > 0 (bestimmter Schwellenwert). Dieses Konfigurationselement ist in Sekunden angegeben und kann auf Dezimalzahlen eingestellt werden.

4. Log-Abfragen, die keine Indizes verwenden

Dieses Konfigurationselement wird zum Aufzeichnen von SQL-Anweisungen verwendet, die keine Indizes verwenden.

So konfigurieren Sie langsame Abfragen

Es gibt zwei Möglichkeiten, die langsame Abfragefunktion zu konfigurieren. Eine besteht darin, die MySQL-Konfigurationsdatei zu verwenden, und die andere darin, den MySQL-Befehl zu verwenden. Es wird empfohlen, die Konfigurationsdatei zu verwenden, da beim Konfigurieren des Befehls manchmal festgestellt wird, dass das Konfigurationselement erfolgreich ist, wenn der Set-Befehl verwendet wird, die Abfrage jedoch immer noch nicht festgelegt ist.

1. Konfigurationsdateikonfiguration

// Suchen Sie [mysqld] und fügen Sie darunter den folgenden Code ein.
slow_query_log=EIN
slow_query_log_file=/usr/local/mysql/var/localhost-slow.log
lange_Abfragezeit=0
log-queries-not-using-indexes = 1
// Nach der Konfiguration den MySQL-Dienst neu starten

2. Verwenden Sie die Befehlskonfiguration

// Hier benötigen wir nur ein Konfigurationselement und andere Konfigurationselemente werden auf diese Weise konfiguriertmysql> set slow_query_log=ON;

Überprüfen Sie nach der Konfiguration, ob das MySQL-Protokoll für langsame Abfragen erfolgreich konfiguriert wurde.

mysql> Variablen wie „%query%“ anzeigen;
+------------------------------+-----------------------------------------+
| Variablenname | Wert |
+------------------------------+-----------------------------------------+
| binlog_rows_query_log_events | AUS |
| ft_query_expansion_limit | 20 |
| habe_Abfragecache | JA |
| lange Abfragezeit | 0,000000 |
| Abfrage-Zuweisungsblockgröße | 8192 |
| Abfrage-Cache-Limit | 1048576 |
| Abfrage-Cache_Mindestressource | 4096 |
| Abfrage-Cache-Größe | 33554432 |
| Abfrage-Cache-Typ | AUS |
| query_cache_wlock_invalidate | AUS |
| Abfrage-Vorzuweisungsgröße | 8192 |
| slow_query_log | EIN |
| slow_query_log_datei | /usr/local/mysql/var/localhost-slow.log |
+------------------------------+-----------------------------------------+
13 Zeilen im Satz (0,01 Sek.)

So zeigen Sie langsame Protokolldatensätze an

Bevor wir die langsame Abfrage konfiguriert haben, haben wir die Beispieldatendatei importiert. Daher führen wir hier keine separate Demonstration durch. Beispiel einer offiziellen MySQL-Datenbank. Als Nächstes beginnen wir mit der Durchführung von Abfragevorgängen.

mysql> wähle * aus Stadt, wobei Stadt = "Salala" ist;
+---------+--------+------------+---------------------+
| Stadt-ID | Stadt | Länder-ID | letzte_Aktualisierung |
+---------+--------+------------+---------------------+
| 444 | Salala | 71 | 15.02.2006 04:45:25 |
+---------+--------+------------+---------------------+
1 Zeile im Satz (0,01 Sek.)

An diesem Punkt haben wir die Protokolldatei für langsame Abfragen /usr/local/mysql/var/localhost-slow.log konfiguriert und festgestellt, dass die Datei die oben genannten Befehlsvorgänge aufzeichnet.

# Zeit: 2019-01-17T08:12:27.184998Z
# Benutzer@Host: root[root] @ localhost [] ID: 4
# Abfragezeit: 0,002773 Sperrzeit: 0,001208 Gesendete Zeilen: 1 Untersuchte Zeilen: 600
SET-Zeitstempel=1547712747;
Wählen Sie * aus der Stadt, in der Stadt = „Salala“;

Inhaltsbeschreibung der Konfiguration der Beschwerdedatei

1.Zeit

Der Zeitpunkt der Protokollaufzeichnung

2.Benutzer@Host

MySQL-Anmeldebenutzer und Anmeldehostadresse

3. Query_time-Zeile

Die erste Zeit ist die Abfragezeit, die zweite die Tabellensperrzeit, die dritte die Anzahl der zurückgegebenen Zeilen und die vierte die Anzahl der gescannten Zeilen.

4.SET-Zeitstempel

Dies ist die Zeit der MySQL-Abfrage

5.SQL-Anweisung

Diese Zeile ist sehr offensichtlich, sie stellt die SQL-Anweisung dar, die wir ausgeführt haben

Zusammenfassen

Da wir long_query_time=0 konfigurieren, werden alle SQL-Anweisungen aufgezeichnet. Hier nehmen wir einfach an, nehmen wir einfach an. Wir haben long_query_time = 5 festgelegt, aber im dritten Punkt oben ist Query_time größer als 5. Wenn es im tatsächlichen Projekt nicht im normalen Bereich liegt, muss es optimiert werden. Natürlich gibt es viele Möglichkeiten, es zu optimieren. Lassen Sie uns eine einfache Indexmethode verwenden, um es zu optimieren.

Optimieren von SQL-Anweisungen

1. Überprüfen Sie zunächst die ursprüngliche Ausführungsstruktur der SQL-Anweisung

mysql> erklären Sie die Auswahl * aus Stadt, wo Stadt = "Salala"\G;
*************************** 1. Reihe ***************************
      ID: 1
 select_type: EINFACH
    Tabelle: Stadt
  Partitionen: NULL
     Typ: ALLE
mögliche Schlüssel: NULL
     Schlüssel: NULL
   key_len: NULL
     Ref: NULL
     Reihen: 600
   gefiltert: 10.00
    Extra: Verwenden von „where“
1 Zeile im Satz, 1 Warnung (0,00 Sek.)
mysql> erstelle Index idx_cityName für Stadt(`Stadt`);
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

Es ist ersichtlich, dass die SQL-Anweisung einen vollständigen Scan durchführt. Wir verwenden den Index einfach zur Optimierung.

2. Erstellen Sie einen Index

mysql> erstelle Index idx_cityName für Stadt(`Stadt`);
Abfrage OK, 0 Zeilen betroffen (0,03 Sek.)
Datensätze: 0 Duplikate: 0 Warnungen: 0

3. Nochmals analysieren mit Explain

mysql> erklären Sie die Auswahl * aus Stadt, wo Stadt = "Salala"\G;
*************************** 1. Reihe ***************************
      ID: 1
 select_type: EINFACH
    Tabelle: Stadt
  Partitionen: NULL
     Typ: ref
mögliche Schlüssel: idx_cityName
     Schlüssel: idx_cityName
   Schlüssellänge: 152
     Verweis: const
     Reihen: 1
   gefiltert: 100,00
    Extra: NULL
1 Zeile im Satz, 1 Warnung (0,00 Sek.)

Durch die Erstellung eines Indexes stellten wir fest, dass zu diesem Zeitpunkt nur eine Zeile gescannt wurde und der Index-Scan verwendet wurde, was die Effizienz einer MySQL-Abfrage erheblich verbesserte.

Zusammenfassung der Verwendung langsamer MySQL-Abfragen

Bei der normalen Entwicklung sind langsame Abfragen eine sehr nützliche Möglichkeit zur Optimierung von MySQL. Es zeichnet einige unserer SQL-Anweisungen mit langer Abfragezeit auf und wir analysieren sie, um die SQL-Abfrageanweisungen zu optimieren. Nachdem jedoch die langsame Protokollabfrage aktiviert wurde, werden die relevanten Datensätze für die SQL-Abfrage über die Festplatten-E/A in die Festplattendatei geschrieben, was den Lese- und Schreibvorgang der Festplatten-E/A erhöht. Daher verwenden wir diese Funktion in Entwicklungs- und Testumgebungen, nicht in Produktionsumgebungen.

Tool für langsame Protokollabfragen

Je neuer die Slow-Log-Abfragedatei ist, desto mehr Inhalt enthält sie. Je stärker der Analysedruck ist, desto mehr Tools müssen wir einsetzen, um eine schnelle Analyse zu erreichen. Ich bin mit diesen Tools noch nicht ganz vertraut. Ich werde später einen separaten Artikel schreiben, um diese Art von Tools vorzustellen. Hier werde ich nur die Toolnamen auflisten.
1.mysqldumpslow
2.pt-Abfrage-Digest
3.mysqltop (Lepus)

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Analyse und Lösung eines Fehlalarmproblems bei der langsamen MySQL-Protokollüberwachung
  • Detaillierte Erläuterung der langsamen MySQL-Protokollabfrage
  • Eine detaillierte Einführung in den Aufbau und die Verwendung des Tools Anemometer zeigt MySQL Slow Logs grafisch an
  • MySQL-Onlineprobleme mit langsamem Log und Optimierungslösungen
  • So aktivieren Sie die langsame Anmeldung in MySQL 5.5 (log_slow_queries)
  • So erhalten Sie in MySQL nach Zeit Informationen zu langsamen Protokollen
  • Überwachen Sie die Effizienz der SQL-Anweisungsausführung basierend auf dem langsamen MySQL-Protokoll
  • Zusammenfassung des Wissens zu langsamen MySQL-Protokollen

<<:  Detaillierte Erklärung der schmerzlosen Token-Aktualisierungsmethode von Uniapp

>>:  So konfigurieren Sie inländische Quellen in CentOS8 yum/dnf

Artikel empfehlen

Vue implementiert WebSocket-Kundendienst-Chatfunktion

In diesem Artikel wird hauptsächlich die Implemen...

Detaillierte Anweisungen zur Installation von SuPHP auf CentOS 7.2

Standardmäßig wird PHP unter CentOS 7 als Apache ...

Erste Schritte mit Front-End-Vue-Unit-Tests

Inhaltsverzeichnis 1. Warum brauchen wir Unit-Tes...

js Implementierung des Verifizierungscode-Falls

In diesem Artikelbeispiel wird der spezifische Co...

Wozu dient das Feld „enctype“ beim Hochladen von Dateien?

Das enctype-Attribut des FORM-Elements gibt den Ko...

Detaillierte Erläuterung der Winkel-Zweiwegebindung

Inhaltsverzeichnis Bidirektionales Bindungsprinzi...

Vertieftes Verständnis davon in JavaScript

Vertieftes Verständnis davon in Js JavaScript Ber...

So verwenden Sie die MySQL-Indexzusammenführung

Die Indexzusammenführung ist ein intelligenter Al...

js Promise-Methode zur gleichzeitigen Steuerung

Inhaltsverzeichnis Frage Hintergrund Idee & U...

React implementiert dynamische Popup-Fensterkomponente

Wenn wir beim Schreiben einiger UI-Komponenten di...

Detaillierte Schritte zur schnellen Installation von Openshift

Der schnellste Weg, die neueste Version von OpenS...

So erstellen Sie ein React-Projekt mit Vite

Inhaltsverzeichnis Vorwort Erstellen Sie ein Vite...