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

So stellen Sie über Navicat eine Remoteverbindung zu MySQL her

Wenn Sie Navicat direkt für die Verbindung über I...

Einführung in Container-Datenvolumes in Docker

Inhaltsverzeichnis Datenvolumen des Docker-Contai...

So aktivieren Sie den Fernzugriff in Docker

Docker-Daemon-Socket Der Docker-Daemon kann über ...

So zeigen Sie im img-Tag in HTML nur die Bildmitte an (drei Methoden)

Derzeit gibt es drei Möglichkeiten, die Mitte ein...

Zusammenfassung der Kenntnisse und der Verwendung von Linux-VI-Befehlen

Detaillierte Erklärung des Linux-Befehls vi Der v...

Methode und Einführung der Tabellenindexdefinition in MySQL

Überblick Ein Index ist eine vom DBMS basierend a...

So konvertieren Sie MySQL-Bin-Log-Protokolldateien in SQL-Dateien

mysqlbinlog-Version anzeigen mysqlbinlog -V [--ve...

HTML 5.1 lernen: 14 neue Features und Anwendungsbeispiele

Vorwort Wie wir alle wissen, gehört HTML5 dem Wor...

Navicat für MySQL 11 Registrierungscode\Aktivierungscode-Zusammenfassung

Lesetipp: Navicat12.1 Serie Cracking und Aktivier...

Was ist TypeScript?

Inhaltsverzeichnis 1. JavaScript-Probleme 2. Vort...

So erzielen Sie mit Vue3 beispielsweise einen Lupeneffekt

Inhaltsverzeichnis Vorwort 1. Die Bedeutung der K...

MySQL-Sharding-Details

1. Einführung in das Geschäftsszenario Angenommen...