Detaillierte Erläuterung der langsamen MySQL-Protokollabfrage

Detaillierte Erläuterung der langsamen MySQL-Protokollabfrage

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 Protokollabfragen

Öffnen Sie MySQL und zeigen Sie die relevante Konfiguration mit dem folgenden Befehl an:

mysql> Variablen wie „%query%“ anzeigen;
+------------------------------+--------------------------------------------------+
| Variablenname | Wert |
+------------------------------+--------------------------------------------------+
| binlog_rows_query_log_events | AUS |
| ft_query_expansion_limit | 20 |
| have_query_cache | NEIN |
| lange Abfragezeit | 10.000000 |
| Abfrage-Zuweisungsblockgröße | 8192 |
| Abfrage-Vorzuweisungsgröße | 8192 |
| slow_query_log | AUS |
| slow_query_log_file | /usr/local/mysql/data/seandeMacBook-Pro-slow.log |
+------------------------------+--------------------------------------------------+
8 Zeilen im Satz (0,00 Sek.)

Die Konfigurationselemente, die Aufmerksamkeit erfordern, sind:

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 eine langsame Protokollabfrage

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 nach [mysqld] und fügen Sie darunter den folgenden Code hinzu.
slow_query_log=EIN
slow_query_log_file=/usr/local/mysql/var/localhost-slow.log
lange_Abfragezeit=0
log-queries-not-using-indexes = 1
-- Starten Sie den MySQL-Dienst nach der Konfiguration neu

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;
-- Wenn die Ausführung fehlschlägt, liegt dies möglicherweise daran, dass das Global nicht hinzugefügt wurde

mysql> globales slow_query_log=ON festlegen;

Ü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 |
| have_query_cache | NEIN |
| lange Abfragezeit | 10.000000 |
| Abfrage-Zuweisungsblockgröße | 8192 |
| Abfrage-Vorzuweisungsgröße | 8192 |
| slow_query_log | EIN |
| slow_query_log_file | /usr/local/mysql/data/seandeMacBook-Pro-slow.log |
+------------------------------+--------------------------------------------------+
8 Zeilen im Satz (0,01 Sek.)

So zeigen Sie Datensätze langsamer Abfragen an

Setzen Sie zunächst den Zeitschwellenwert des langsamen Abfrageprotokolls auf 0

mysql> globale long_query_time=0 festlegen;
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)

Starten Sie MySQL neu, damit die Änderungen wirksam werden

Vor der Konfiguration langsamer Abfragen wurden die Beispieldatendateien importiert. Offizielles MySQL-Datenbeispiel, dann mit der Abfrage beginnen.

mysql> wähle * aus Stadt, wo Name = ‚Salala‘;
+------+--------+----------+----------+------------+
| ID | Name | Ländercode | Bezirk | Einwohnerzahl |
+------+--------+----------+----------+------------+
| 2818 | Salala | OMN | Zufar | 131813 |
+------+--------+----------+----------+------------+
1 Zeile im Satz (0,01 Sek.)

Überprüfen Sie die obigen Befehlsvorgänge anhand der konfigurierten Protokolldatei für langsame Abfragen /usr/local/mysql/data/seandeMacBook-Pro-slow.log.

# Zeit: 2019-08-20T09:17:49.791767Z
# Benutzer@Host: root[root] @ localhost [] ID: 150
# Abfragezeit: 0,002549 Sperrzeit: 0,000144 Gesendete Zeilen: 1 Untersuchte Zeilen: 4079
SET-Zeitstempel=1566292669;
Wählen Sie * aus der Stadt, in der Name = „Salala“ ist;

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. Zeigen Sie die ursprüngliche Ausführungsstruktur der SQL-Anweisung an:

mysql> erklären Sie die Auswahl * aus der Stadt, in der Name = "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: 4188
   gefiltert: 10.00
    Extra: Verwenden von „where“
1 Zeile im Satz, 1 Warnung (0,00 Sek.)

Es ist ersichtlich, dass die SQL-Anweisung einen vollständigen Festplattenscan durchführt. Wir können Indizes verwenden, um es einfach zu optimieren.

2. Erstellen Sie einen Index

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

3. Verwenden Sie „erklären“ zur Analyse

mysql> erklären Sie die Auswahl * aus der Stadt, in der Name = "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: 35
     Verweis: const
     Reihen: 1
   gefiltert: 100,00
    Extra: NULL
1 Zeile im Satz, 1 Warnung (0,01 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)

Oben finden Sie eine ausführliche Erläuterung der langsamen MySQL-Protokollabfrage. Weitere Informationen zur langsamen MySQL-Protokollabfrage finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Analyse und Lösung eines Fehlalarmproblems bei der langsamen MySQL-Protokollüberwachung
  • Eine detaillierte Einführung in den Aufbau und die Verwendung des Tools Anemometer zeigt MySQL Slow Logs grafisch an
  • Zusammenfassung der MySQL-Slow-Log-Praxis
  • 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

<<:  Allgemeine Front-End-JavaScript-Methodenkapselung

>>:  Verwenden von NTP zur Zeitsynchronisierung in Ubuntu

Artikel empfehlen

Eine dauerhafte Lösung für MySQLs Unfähigkeit, Chinesisch zu erkennen

In den meisten Fällen unterstützt MySQL Chinesisc...

Schritte zum Übertragen von Dateien und Ordnern zwischen zwei Linux-Servern

Heute habe ich mich mit der Migration eines Proje...

Einfaches Anwendungsbeispiel für MySQL-Trigger

Dieser Artikel veranschaulicht anhand von Beispie...

Vue implementiert Fuzzy-Abfrage-MySQL-Datenbankdaten

Inhaltsverzeichnis 1. Nachfrage 2. Umsetzung 3. E...

Docker-Kern und spezifische Verwendung der Installation

1. Was ist Docker? (1) Docker ist ein Open-Source...

Ein vollständiges Tutorial zur Verwendung der Axios-Kapselung in Vue

Vorwort Heutzutage wird in Projekten häufig die A...

HTML-Tabellen-Tag-Tutorial (33): Attribut für vertikale Zellenausrichtung VALIGN

In vertikaler Richtung können Sie die Zellenausri...

Hilfe zum Webdesign: Datenreferenz für Web-Schriftgrößen

<br />Der Inhalt wurde aus dem Internet repr...

Detaillierte Schritte zum Konfigurieren virtueller Hosts in nginx

Virtuelle Hosts verwenden spezielle Software- und...

MySQL5.7 Master-Slave-Konfigurationsbeispielanalyse

Implementierungsmethode für die MySQL5.7-Master-S...

jQuery implementiert gleitende Registerkarte

In diesem Artikelbeispiel wird der spezifische Co...

Lösung für die Baidu-Site-Suche, die https nicht unterstützt (getestet)

Seit kurzem ist https auch auf dem Handy möglich....

So verwenden Sie nginx, um eine angegebene Schnittstelle (URL) zu blockieren

1. Einleitung Manchmal müssen Sie eine Servicesch...