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

Entwicklung einer Vue Element-Frontend-Anwendung zum Abrufen von Backend-Daten

Inhaltsverzeichnis Überblick 1. Erfassung und Ver...

Thumbnail-Hover-Effekt mit CSS3 implementiert

Ergebnisse erzielenImplementierungscode html <...

js-Speicherleckszenarien, wie man sie im Detail überwacht und analysiert

Inhaltsverzeichnis Vorwort Welche Situationen kön...

Erstellen Sie mit PS in zwei Minuten eine Homepage für eine XHTML+CSS-Website

Es gibt zu viele Artikel über Webstandards zur We...

Pygame-Code zum Erstellen eines Schlangenspiels

Inhaltsverzeichnis Verwendete Pygame-Funktionen E...

MySQL wählt die richtige Speicher-Engine

Wenn es um Datenbanken geht, ist eine der am häuf...

So ändern Sie das Root-Benutzerkennwort in MySQL 8.0.16, WinX64 und Linux

Grundlegende Vorgänge wie die Verbindung zur Date...

Ein Beispiel für die Umgestaltung eines Puzzlespiels mit vue3

Vorwort Es dauerte zwei Tage, um ein Puzzlespiel ...

Detaillierte Erläuterung der Vue-Lebenszyklusfunktionen

Inhaltsverzeichnis Lebenszyklusfunktionen Allgeme...

SQL Left Join und Right Join - Prinzip und Beispielanalyse

Es gibt zwei Tabellen, und die Datensätze in Tabe...

Detaillierte Erklärung der Meta-Tags (die Rolle der Meta-Tags)

Egal wie großartig Ihre persönliche Website ist, ...

CentOS-Methode zum Ändern der Standard-SSH-Portnummer – Beispiel

Die Standard-SSH-Portnummer von Linux-Servern ist...