Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist eine langsame PHP-MySQL-Abfrage?

Was ist eine langsame PHP-MySQL-Abfrage?

藏色散人
藏色散人Original
2021-11-10 09:49:022380Durchsuche

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.

Was ist eine langsame PHP-MySQL-Abfrage?

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 Parameter

long_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. Was ist eine langsame PHP-MySQL-Abfrage?

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.

Was ist eine langsame PHP-MySQL-Abfrage?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn