Vérification des requêtes lentes et des processus MySQL
Cet article aborde quelques problèmes courants de MySQL (requêtes lentes, processus prenant trop de temps) qui peuvent avoir un impact négatif sur le site d’un commerçant et sur les solutions qu’ils indiquent.
Vérification des « requêtes lentes » MySQL
Description
Si vous avez rencontré une panne potentiellement due à une surcharge de la base de données, ces étapes vous aideront à vérifier le journal des requêtes lentes de votre base de données.
Analyser les requêtes à l’aide de la ligne de commande MySQL (Adobe Commerce Cloud/on-premise/Magento Open Source)
-
Connectez-vous à votre ligne de commande MySQL (Adobe Commerce on-premise/Magento Open Source) ou à votre serveur cloud à partir de la ligne de commande (Adobe Commerce sur l’infrastructure cloud).
-
Examinez le journal des requêtes lentes pour les requêtes de plus de 50 secondes :
code language-bash grep 'Query_time: [5-9][0-9]|Query_time: [0-9][0-9][0-9]' /var/log/mysql/mysql-slow.log -A 3 -
Accédez à https://www.unixtimestamp.com/ (ou à un convertisseur d’horodatage Unix similaire) et insérez l’horodatage du moment où la requête lente a été exécutée.
-
Si l’heure correspond à une panne du site que vous avez rencontrée, elle peut être due à une surcharge de la base de données. Vérifiez quels chargements se trouvaient dans la base de données à ce moment-là. Ces charges peuvent être par exemple :
- Processus cron
- Trafic (robots ou personnes)
- Scripts d’import/export
- Création d’images mémoire
Analysez les requêtes à l’aide de l’Percona Toolkit (Adobe Commerce Pro : architecture cloud uniquement).
Si votre projet Adobe Commerce est déployé sur une architecture Pro, vous pouvez utiliser le Percona Toolkit pour analyser les requêtes.
-
Exécutez la commande
pt-query-digest --type=slowlogsur les journaux de requêtes lentes MySQL.- Pour trouver l’emplacement des journaux de requêtes lentes, consultez Log locations > Service Logs dans notre documentation destinée aux développeurs.
- Voir la documentation Percona Toolkit > pt-query-digest .
-
En fonction des problèmes trouvés, prenez les mesures nécessaires pour corriger la requête, afin qu’elle s’exécute plus rapidement.
Vérification de la « liste de processus » MySQL
Description
Cela permet de déterminer si le serveur MySQL est actif et s’il n’existe aucune requête bloquée.
Étapes
-
Connectez-vous à votre ligne de commande MySQL (Adobe Commerce on-premise/Magento Open Source) ou à votre serveur cloud à partir de la ligne de commande (Adobe Commerce sur l’infrastructure cloud).
-
Connectez-vous à MySQL en utilisant le bloc de code ci-dessous. Cela automatisera le processus de connexion.
code language-mysql `export DB_NAME=$(grep [\']db[\'] -A 20 app/etc/env.php | grep dbname | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//"); export MYSQL_HOST=$(grep [\']db[\'] -A 20 app/etc/env.php | grep host | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//"); export DB_USER=$(grep [\']db[\'] -A 20 app/etc/env.php | grep username | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//"); export MYSQL_PWD=$(grep [\']db[\'] -A 20 app/etc/env.php | grep password | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/[']$//" | sed "s/['][,]//"); mysql -h $MYSQL_HOST -u $DB_USER --password=$MYSQL_PWD $DB_NAME -U -A -e 'show processlist;` -
Si vous obtenez une erreur en retour ou si la réponse dure plus de 30 secondes, vous devez contacter le support technique pour vérifier le serveur MySQL.
-
Examiner l’exemple de sortie.
-
Voici un exemple de sortie :
code language-mysql `$ mysql -h $MYSQL_HOST -u $DB_USER --password=$MYSQL_PWD $DB_NAME -U -A -e 'show processlist;' +-----------+---------------+--------------------+---------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-----------+---------------+--------------------+---------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+----------+ | 123456789 | abcdefghijklm | 192.168.7.10:12345 | abcdefghijklm | Query | 0 | Writing to net | SELECT `magento_versionscms_hierarchy_node`.*, `page_table`.`title` AS `page_title`, `page_table`.`i | 0.000 | | 123456788 | abcdefghijklm | 192.168.7.10:12344 | abcdefghijklm | Sleep | 0 | | NULL | 0.000 | | 123456777 | abcdefghijklm | 192.168.7.10:12333 | abcdefghijklm | Sleep | 0 | | NULL | 0.000 | | 123456666 | abcdefghijklm | 192.168.5.8:12222 | abcdefghijklm | Sleep | 0 | | NULL | 0.000 |` -
Vérifiez la colonne « Durée » pour toute durée supérieure à 1 800 secondes ; cela indique un processus dont l’exécution peut prendre trop de temps. Notez l’état des processus dans la colonne « État ».
-
Passez en revue les requêtes et, éventuellement, supprimez-les si vous estimez qu’elles ne doivent pas s’exécuter pendant cette durée. Il est possible que les requêtes à exécution longue soient attendues.
Lecture connexe
- MySQL Afficher la syntaxe Processlist dans dev.mysql.com.
- Syntaxe MySQL Kill dans dev.mysql.com.
- Sécurité, performances et gestion des données dans notre documentation destinée aux développeurs.
- Aide MySQL dans notre documentation destinée aux développeurs.