Comment faire pour résoudre les requêtes MySQL

Note

Parfois, les utilisateurs rencontrent des problèmes une fois qu'ils commencent à émettre des requêtes sur leurs données. Dans certains systèmes de base de données, y compris MySQL, les instructions de requête dans doivent se terminer par un point-virgule (;) pour que la requête se termine, comme dans l'exemple suivant:

SHOW * FROM table_name;

Si vous ne parvenez pas à inclure un point-virgule à la fin de votre requête, l'invite continuera sur une nouvelle ligne jusqu'à ce que vous terminiez la requête en entrant un point-virgule et en appuyant surENTER.

Certains utilisateurs peuvent trouver que leurs requêtes sont extrêmement lentes. Un moyen de rechercher l’instruction de requête à l'origine du ralentissement consiste à activer et afficher le journal de requêtes lentes de MySQL. Pour ce faire, ouvrez votre fichiermysqld.cnf, qui est utilisé pour configurer les options du serveur MySQL. Ce fichier est généralement stocké dans le répertoire/etc/mysql/mysql.conf.d/:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Faites défiler le fichier jusqu'à voir les lignes suivantes:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
#slow_query_log         = 1
#slow_query_log_file    = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .

Ces directives commentées fournissent les options de configuration par défaut de MySQL pour le journal de requête lent. Plus précisément, voici ce que chacun fait:

  • slow-query-log: définir ce paramètre sur1 active le journal des requêtes lentes.

  • slow-query-log-file: Ceci définit le fichier dans lequel MySQL enregistrera toutes les requêtes lentes. Dans ce cas, il pointe vers le fichier/var/log/mysql-slow.log.

  • long_query_time: en définissant cette directive sur2, il configure MySQL pour enregistrer toutes les requêtes qui prennent plus de 2 secondes pour se terminer.

  • log_queries_not_using_indexes: Ceci indique à MySQL de consigner également toutes les requêtes qui s'exécutent sans index dans le fichier/var/log/mysql-slow.log. Ce paramètre n’est pas requis pour que le journal de requête lent puisse fonctionner, mais il peut être utile pour détecter les requêtes inefficaces.

Décommentez chacune de ces lignes en supprimant les premiers signes dièse (#). La section ressemblera maintenant à ceci:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .

[.Remarque]##

Note: Si vous exécutez MySQL 8+, ces lignes commentées ne seront pas dans le fichiermysqld.cnf par défaut. Dans ce cas, ajoutez les lignes suivantes au bas du fichier:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes

Après avoir activé le journal de requête lent, enregistrez et fermez le fichier. Puis redémarrez le service MySQL:

sudo systemctl restart mysql

Une fois ces paramètres en place, vous pouvez rechercher les instructions de requête problématiques en consultant le journal de requête lent. Vous pouvez le faire avecless, comme ceci:

sudo less /var/log/mysql_slow.log

Une fois que vous avez identifié les requêtes à l'origine du ralentissement, vous trouverez peut-être notre guide sur lesHow To Optimize Queries and Tables in MySQL and MariaDB on a VPS pour vous aider à les optimiser.

De plus, MySQL inclut l'instructionEXPLAIN, qui fournit des informations sur la manière dont MySQL exécute les requêtes. This page from the official MySQL documentation fournit des informations sur l'utilisation deEXPLAIN pour mettre en évidence les requêtes inefficaces.

Pour obtenir de l'aide sur la compréhension des structures de requêtes de base, consultez nosIntroduction to MySQL Queries.

Related