Heim > Artikel > Backend-Entwicklung > Was ist eine langsame PHP-MySQL-Abfrage?
php mysql slow query bezieht sich auf die Aufzeichnung von SQL-Anweisungen, die relativ langsam im Protokoll ausgeführt werden. Durch die Aktivierung des langsamen Abfrageprotokolls kann MySQL Abfragen aufzeichnen, die die angegebene Zeit überschreiten. Durch das Auffinden und Analysieren von Leistungsengpässen kann die Datenbank besser optimiert werden. Systemleistung.
Die Betriebsumgebung dieses Artikels: Windows7-System, PHP7.1-Version, DELL G3-Computer
php Was ist eine langsame MySQL-Abfrage?
Die langsame MySQL-Abfrage zeichnet SQL-Anweisungen auf, die langsam im Protokoll ausgeführt werden. Diese Funktion muss aktiviert werden, um sie verwenden zu können.
1. Einführung
Durch die Aktivierung des langsamen Abfrageprotokolls kann MySQL Abfragen aufzeichnen, die die angegebene Zeit überschreiten. Durch das Auffinden und Analysieren von Leistungsengpässen kann die Leistung des Datenbanksystems besser optimiert werden.
2. Einführung in die Parameterlong_query_time Gibt an, wie lange die Abfrage jede Sekunde aufzeichnet. Der Standardwert beträgt 10 Sekunden.
3. Langsame Abfrage aktivieren
Setzen Sie die globale Variable slow_query_log auf den Status „ON“
mysql> show variables like 'slow_query%'; +---------------------------+-----------------------------------+ | Variable_name | Value | +---------------------------+-----------------------------------+ | slow_query_log | OFF | | slow_query_log_file | /usr/local/var/mysql/slow.log | +---------------------------+-----------------------------------+ mysql> show variables like 'long_query_time'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | long_query_time | 10.000000 | +-----------------+-----------+
Legen Sie den Speicherort fest, an dem das langsame Abfrageprotokoll gespeichert wird
mysql> set global slow_query_log='ON';
Legen Sie die langsame Abfragezeit fest und zeichnen Sie die Abfrage auf, wenn sie 1 Sekunde überschreitet
mysql> set global slow_query_log_file='/usr/local/var/mysql/slow.log ';
Methode 2: Konfiguration Dateieinstellungen
Ändern Sie die Konfigurationsdatei my.cnf unter [mysqld] Fügen Sie unten
mysql> set global long_query_time=1;
hinzu (3) Starten Sie den MySQL-Dienst neu
[mysqld] slow_query_log = ON slow_query_log_file = /usr/local/var/mysql/slow.log long_query_time = 1
(4) Analyse des langsamen Abfrageprotokolls
Einen Abschnitt des langsamen Abfrageprotokolls abfangen:
service mysqld restart
Sie können hier sehen:
Query_time (die Abfragezeit der langsamen Abfrageanweisung) hat die eingestellten 1 Sekunden überschritten,
Rows_sent (von langsamer Abfrage zurückgegebene Datensätze) nur 1
Rows_examined (Anzahl der von langsamer Abfrage gescannten Zeilen). wurde hier zurückgegeben 44438 -> Von hier aus ist ersichtlich, dass das Problem riesig ist
Jetzt werden wir diese SQL-Anweisung zur Ausführung in die Datenbank stellen und EXPLAIN verwenden, um den Ausführungsplan zu analysieren
# Time: 180918 19:06:21 # User@Host: proxy[proxy] @ [192.168.0.16] Id: 6707197 # Query_time: 1.015429 Lock_time: 0.000116 Rows_sent: 1 Rows_examined: 44438 SET timestamp=1537268781; select id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag, nodisturb_mode, nodisturb_start_time, nodisturb_end_time, binding_time, device_os_type, app_type, state from app_mobile_device where user_id = '78436' and app_type = 'YGY' order by binding_time desc; # User@Host: proxy[proxy] @ [192.168.0.16] Id: 6707236 # Query_time: 1.021662 Lock_time: 0.000083 Rows_sent: 1 Rows_examined: 44438 SET timestamp=1537268781; select id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag, nodisturb_mode, nodisturb_start_time, nodisturb_end_time, binding_time, device_os_type, app_type, state from app_mobile_device where user_id = '14433' and app_type = 'YGY' order by binding_time desc;
Das Abfrageergebnis ist:
Erklären Sie die Parameter:Hier finden Sie: Zeilen ist die Anzahl der Zeilen in der Abfrage. Die Abfrage ist nach dem Lesen von mehr als 40.000 Zeilen definitiv langsam.
Da es hier mehrere Bedingungen gibt und kein Index verwendet wird, können wir der Auswahl nur einen Index hinzufügen.
Fügen Sie der Auswahl einen normalen mehrspaltigen Index hinzu, da es zu Beginn ein Problem mit dem Design dieser Tabelle gab Duplizierung. Daten, eindeutiger Index kann nicht festgelegt werden.
EXPLAIN select id, user_id, device_uuid, bd_client_id, bd_user_id, bd_tag, nodisturb_mode, nodisturb_start_time, nodisturb_end_time, binding_time, device_os_type, app_type, state from app_mobile_device where user_id = '78436' and app_type = 'YGY' order by binding_time desc;Der Index ist festgelegt. Schauen wir uns jetzt den Ausführungsplan von SQL an. Sie können feststellen, dass die Anzahl der überprüften Zeilen offensichtlich gesunken ist. Zu diesem Zeitpunkt sind die Verwendung und Optimierung langsamer Abfragen grundsätzlich abgeschlossen. Empfohlenes Lernen: „
PHP-Video-Tutorial
“Das obige ist der detaillierte Inhalt vonWas ist eine langsame PHP-MySQL-Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!