Beispiel einer langsamen MySQL-Abfrage

Beispiel einer langsamen MySQL-Abfrage

Einführung

Durch Aktivieren des Slow Query Log kann MySQL Abfrageanweisungen aufzeichnen, die die angegebene Zeit überschreiten. Durch das Auffinden und Analysieren von Leistungsengpässen lässt sich die Leistung des Datenbanksystems besser optimieren.

1. Konfigurieren Sie langsame Abfragen

1. Parameterbeschreibung

  • slow_query_log: Status der Aktivierung langsamer Abfragen (standardmäßig deaktiviert)
  • slow_query_log_file: Der Speicherort, an dem das langsame Abfrageprotokoll gespeichert wird (dieses Verzeichnis erfordert Schreibberechtigungen für das laufende MySQL-Konto und ist im Allgemeinen auf das MySQL-Datenspeicherverzeichnis eingestellt)
  • long_query_time: Wie viele Sekunden dauert es, bis eine Abfrage aufgezeichnet wird (standardmäßig 10 Sekunden)

2. Zeigen Sie Parameter für langsame Abfragen an

Variablen wie „slow_query%“ anzeigen;
+-----------------------------------------+----------------------------------+
| Variablenname | Wert |
+-----------------------------------------+----------------------------------+
| slow_query_log | AUS |
| slow_query_log_datei | /mysql/data/localhost-slow.log |
+-----------------------------------------+----------------------------------+

Variablen wie „long_query_time“ anzeigen;
+-----------------+------------+
| Variablenname | Wert |
+-----------------+------------+
| lange Abfragezeit | 10.000000 |
+-----------------+------------+

3. Konfigurieren Sie langsame Abfragen

Es gibt zwei Konfigurationsmethoden: eine ist die globale Variablenkonfiguration und die andere ist die Konfiguration mit einer Konfigurationsdatei

(1) Globale Variablenkonfiguration

--Setzen Sie die globale Variable slow_query_log auf den Status „ON“ set global slow_query_log='ON'; 

--Legen Sie den Speicherort fest, an dem das Protokoll für langsame Abfragen gespeichert wird. Setzen Sie global slow_query_log_file='/usr/local/mysql/data/slow.log';

--Aufzeichnen, wenn die Abfrage 1 Sekunde überschreitet, global long_query_time=1 setzen;

(2) Ändern Sie die Konfigurationsdatei my.cnf (unter Linux-Umgebung).

  slow_query_log = EIN
  slow_query_log_file = /usr/local/mysql/data/slow.log
  lange_Abfragezeit = 1

Zusammenfassen:
(1) Nach der Konfiguration über globale Variablen müssen Sie die Sitzung schließen und die Abfrage erneut öffnen, damit sie wirksam wird. Über die Konfigurationsdatei müssen Sie den MySQL-Server neu starten, damit sie wirksam wird. (2) Da die Aktivierung langsamer Abfragen die Leistung beeinträchtigt, wird im Allgemeinen empfohlen, die Konfiguration über globale Variablen vorzunehmen. Auf diese Weise wird durch einen Neustart des Servers der langsame Abfragestatus standardmäßig deaktiviert.

2. mysqldumpslow-Tool

mysqldumpslow ist ein Tool, das mit MySQL geliefert wird. Damit müssen wir nicht in der obigen Protokolldatei danach suchen. Wenn es sich um normale Daten handelt, ist das Überprüfen des Protokolls ebenfalls eine mühsame Aufgabe.

1. Hauptbefehle

--s: gibt die Sortiermethode an--c: Anzahl der Besuche--l: Sperrzeit--r: zurückgegebene Datensätze--t: Abfragezeit--al: durchschnittliche Sperrzeit--ar: durchschnittliche Anzahl zurückgegebener Datensätze--at: durchschnittliche Abfragezeit--t: wie viele Datensätze werden vorne zurückgegeben--g: gefolgt von einem regulären Übereinstimmungsmuster, ohne Berücksichtigung der Groß-/Kleinschreibung

2. Beispiele

--1. Holen Sie sich die 10 SQL-Anweisungen, die die meisten Datensätze zurückgeben
  mysqldumpslow -s -r -t 10 /logs/mysql-slow.log

 --2. Holen Sie sich die Top 10 SQLs mit der höchsten Anzahl an Besuchen
  mysqldumpslow -s -c -t 10 /logs/mysql-slow.log

 --3. Holen Sie sich die ersten 10 Abfrageanweisungen mit Links, sortiert nach Zeit mysqldumpslow -st -t 10 -g "left join" /logs/mysql-slow.log
 
 --4. Darüber hinaus wird empfohlen, bei der Verwendung dieser Befehle | und mehr zu verwenden, da sonst der Bildschirm explodieren kann. mysqldumpslow -sr -t 10 /logs/mysql-slow.log | mehr

3. Profil anzeigen

Profile anzeigen wurde nach 5.0.37 hinzugefügt. Um diese Funktion zu verwenden, stellen Sie sicher, dass die Version höher als 5.0.37 ist.

1. Profil anzeigen aktivieren

Variablen wie „Profiling“ anzeigen;--Die Standardeinstellung ist geschlossen+---------------+----------+
| Variablenname | Wert |
+---------------+-------+
| Profilierung | AUS |
+---------------+-------+

--enable setzt Profiling auf 1;

2. Führen Sie den angegebenen SQL

Ich führe hier ein paar SQL-Anweisungen aus und führe dann

Profile anzeigen; - listet alle während dieser Öffnungsperiode ausgeführten SQL-Anweisungen mit der angehängten Abfrage-ID auf.
+----------+------------+----------------------------+
| Abfrage-ID | Dauer | Abfrage |
+----------+------------+----------------------------+
| 1 | 0,00168025 | wähle * aus vhr.employee |
| 2 | 0,06573200 | wähle * aus vhr.hr |
+----------+------------+----------------------------+
--Wir können zwei Anweisungen sehen, die die letzten Vorgänge zeigen. Die Listengröße wird durch die Sitzungsvariable „profile_history_size“ gesteuert. Der Standardwert ist 15 und der Maximalwert ist 100.

3. Diagnose spezifischer SQL

zeige Profil-CPU, Block-IO für QueryID -- entspricht QueryID in 2

CPU-PROFIL FÜR ABFRAGE 1 ANZEIGEN;--Frage die spezifischen Informationen der Abfrage-ID 1 ab+----------------------+----------+----------+-------------+
| Status | Dauer | CPU_Benutzer | CPU_System |
+----------------------+----------+----------+---------+
| beginnt | 0,000194 | 0,000000 | 0,000000 |
| Berechtigungen werden geprüft | 0,000012 | 0,000000 | 0,000000 |
| Tabellen öffnen | 0,000030 | 0,000000 | 0,000000 |
| init | 0,000053 | 0,000000 | 0,000000 |
| Systemsperre | 0,000011 | 0,000000 | 0,000000 |
| optimieren | 0,000003 | 0,000000 | 0,000000 |
| Statistik | 0,000014 | 0,000000 | 0,000000 |
| wird vorbereitet | 0,000010 | 0,000000 | 0,000000 |
| wird ausgeführt | 0,000001 | 0,000000 | 0,000000 |
| Daten werden gesendet | 0,001213 | 0,000000 | 0,000000 |
| Ende | 0,000014 | 0,000000 | 0,000000 |
| Abfrageende | 0,000012 | 0,000000 | 0,000000 |
| Tabellen schließen | 0,000019 | 0,000000 | 0,000000 |
| Elemente freigeben | 0,000070 | 0,000000 | 0,000000 |
| aufräumen | 0,000025 | 0,000000 | 0,000000 |
+----------------------+----------+----------+---------+

Schlussfolgerungen, die in der täglichen Entwicklung beachtet werden müssen:

1 Konvertieren von HEAP in MyISAM: Die Abfrageergebnisse sind zu groß, um in den Speicher zu passen, daher werden sie auf die Festplatte verschoben.
2 Erstellen der temporären Tabelle: Erstellen Sie eine temporäre Tabelle, kopieren Sie Daten in die temporäre Tabelle und löschen Sie sie dann.
3 Kopieren in temporäre Tabelle auf der Festplatte: Kopieren Sie die temporäre Tabelle im Speicher auf die Festplatte, gefährlich! ! !
4 gesperrt

Hinweis: Wenn einer oder mehrere der oben genannten Punkte auftreten, bedeutet dies, dass die SQL-Anweisung optimiert werden muss.

Das Obige ist ein Beispiel, das die Details langsamer MySQL-Abfragen erläutert. Weitere Informationen zu langsamen MySQL-Abfragen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Fallstricke bei langsamen MySQL-Abfragen
  • Beispielerklärung für langsame MySQL-Abfragen und -Protokolle
  • Die Rolle und Öffnung des MySQL-Protokolls für langsame Abfragen
  • Langsame MySQL-Abfragen und Protokolleinstellungen und -tests
  • Aktivieren und Konfigurieren des MySQL-Protokolls für langsame Abfragen
  • Beispielcode für ein Mysql-SQL-Überwachungsskript für langsame Abfragen
  • So finden Sie langsame MySQL-Abfragen
  • MySQL-Methode und Beispiel für langsame Abfragen
  • Detaillierte Erklärung, warum die langsame Abfrageprotokollzeit von MySQL 5.7 8 Stunden hinter der Systemzeit liegt
  • Methode und Optimierungsprinzip für langsame MySQL-Abfragen
  • So optimieren Sie die MySQL-Leistung durch langsame MySQL-Abfragen
  • Lösen Sie das Problem des MySQL Threads_running-Surge und der langsamen Abfrage

<<:  js zur Realisierung einer einfachen Warenkorbfunktion

>>:  Einführung in verschiedene Möglichkeiten zur Einführung von CSS in HTML

Artikel empfehlen

Detaillierte Erklärung zur Verwendung des Canvas-Operation-Plugins fabric.js

Fabric.js ist ein sehr nützliches Plug-In für Can...

Zusammenfassung der Linux-Benutzergruppen und -Berechtigungen

Benutzergruppen Unter Linux muss jeder Benutzer e...

Detaillierte Erklärung zum Erstellen einer aktualisierbaren Ansicht in MySQL

Dieser Artikel beschreibt anhand eines Beispiels,...

Drei Möglichkeiten zum Teilen der Komponentenlogik in React

Ohne weitere Umschweife sind dies diese drei Meth...

MySQL-Konfiguration SSL-Master-Slave-Replikation

MySQL5.6 So erstellen Sie SSL-Dateien Offizielle ...

Detaillierte Erklärung zur Verwendung des Grep-Befehls in Linux

Linux-Grep-Befehl Mit dem Linux-Befehl grep könne...

JavaScript-Kreisdiagrammbeispiel

ZeicheneffekteImplementierungscode JavaScript var...

So wählen und verwenden Sie PNG, JPG und GIF als Web-Bildformate

Welches dieser Formate (GIF, PNG oder JPG) sollte...

jQuery implementiert das Ausblenden und Anzeigen von HTML-Elementen

Lassen Sie uns die Funktion von Taobao nachahmen,...

Installieren Sie MySQL 5.6 aus der Yum-Quelle im Centos7.4-System

Systemumgebung: centos7.4 1. Prüfen Sie, ob die D...

js, um den Effekt des Ziehens des Schiebereglers zu erzielen

In diesem Artikel finden Sie den spezifischen Cod...

NestJs verwendet Mongoose zum Betrieb von MongoDB

Ich habe vor Kurzem angefangen, das NestJs-Framew...