Maison  >  Article  >  développement back-end  >  Qu’est-ce qu’une requête lente php mysql ?

Qu’est-ce qu’une requête lente php mysql ?

藏色散人
藏色散人original
2021-11-10 09:49:022356parcourir

La requête lente php mysql fait référence à l'enregistrement des instructions SQL qui s'exécutent relativement lentement dans le journal. L'activation du journal des requêtes lentes permet à MySQL d'enregistrer les requêtes qui dépassent le temps spécifié. En localisant et en analysant les goulots d'étranglement des performances, la base de données peut être mieux optimisée. performances du système.

Qu’est-ce qu’une requête lente php mysql ?

L'environnement d'exploitation de cet article : système Windows7, version PHP7.1, ordinateur DELL G3

php Qu'est-ce qu'une requête lente MySQL ?

La requête lente MySQL enregistre les instructions SQL qui s'exécutent lentement dans le journal. Cette fonction doit être activée pour pouvoir l'utiliser.

1. Introduction

L'activation du journal des requêtes lentes permet à MySQL d'enregistrer les requêtes qui dépassent la durée spécifiée en localisant et en analysant les goulots d'étranglement des performances, les performances du système de base de données peuvent être mieux optimisées.

2. Introduction aux paramètres

slow_query_log état d'ouverture des requêtes lentes

slow_query_log_file L'emplacement où le journal des requêtes lentes est stocké (ce répertoire nécessite les autorisations d'écriture du compte MySQL en cours d'exécution et est généralement défini sur le répertoire de stockage de données MySQL)

long_query_time Durée pendant laquelle la requête dépasse Enregistrer chaque seconde, la valeur par défaut est de 10 secondes

3 Activer la requête lente

(1) Afficher les paramètres liés à la requête lente

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 |
+-----------------+-----------+

(2) Méthode de configuration

Méthode 1 : Paramétrage de la variable globale.

Définissez la variable globale slow_query_log sur le statut « ON »

mysql> set global slow_query_log='ON';

Définissez l'emplacement où le journal des requêtes lentes est stocké

mysql> set global slow_query_log_file='/usr/local/var/mysql/slow.log ';

Définissez la durée de la requête lente et enregistrez la requête si elle dépasse 1 seconde

mysql> set global long_query_time=1;

Méthode 2 : Configuration paramètres du fichier

Modifiez le fichier de configuration my.cnf, sous [mysqld] Ajoutez

[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/var/mysql/slow.log 
long_query_time = 1

ci-dessous (3) Redémarrez le service MySQL

service mysqld restart

(4) Analyse du journal des requêtes lentes

Interceptez un journal des requêtes lentes :

# 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;

Vous peut voir ici :

Query_time (le temps de requête de l'instruction de requête lente) dépasse tous les 1 définis,

Rows_sent (enregistrements renvoyés par une requête lente) Un seul

Rows_examined (nombre de lignes analysées par une requête lente) a été renvoyé ici 44438 -> On peut voir d'ici que le problème est énorme

Maintenant, nous allons mettre cette instruction SQL dans la base de données pour l'exécution et utiliser EXPLAIN pour analyser le plan d'exécution

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;

Le résultat de la requête est :

Qu’est-ce qu’une requête lente php mysql ?

Expliquez les paramètres :

Qu’est-ce qu’une requête lente php mysql ?

Vous pouvez trouver ici : rows est le nombre de lignes dans la requête, requête Après avoir lu plus de 40 000 lignes, c'est définitivement lent.

Parce qu'il y a plusieurs conditions ici, et qu'aucun index n'est utilisé, le seul moyen est d'ajouter un index

Ajoutez un index multi-colonnes normal à la sélection, car il y a eu un problème avec la conception de ce tableau au niveau. au début, ce qui entraîne une duplication des données, un index unique ne peut pas être défini.

ALTER  TABLE  app_mobile_device  ADD  INDEX user_app_type_only (  `user_id` ,`app_type` )

L'index est défini, jetons un œil au plan d'exécution du SQL tout à l'heure.

Qu’est-ce qu’une requête lente php mysql ?

Vous constaterez que le nombre de lignes vérifiées a visiblement diminué.

À ce stade, l'utilisation et l'optimisation des requêtes lentes sont pratiquement terminées.

Apprentissage recommandé : "Tutoriel vidéo PHP"

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn