Lorsque vous travaillez avec des bases de données MySQL ou MariaDB, il est crucial de comprendre les performances de vos requêtes SQL. Le temps d'exécution des requêtes peut avoir un impact significatif sur l'efficacité globale de votre application. Heureusement, MySQL et MariaDB offrent une fonctionnalité appelée profiling qui permet d'obtenir un aperçu détaillé du temps d'exécution de chaque requête.
Activer le profiling
Le profiling dans MySQL/MariaDB est une fonctionnalité qui doit être explicitement activée dans une session. Une fois activé, le serveur commence à suivre le temps d'exécution des requêtes exécutées.
Pour activer le profiling, il vous suffit d'exécuter la commande SQL suivante dans votre session MySQL/MariaDB :
SET profiling = 1;
Cette commande indique au serveur de commencer à capturer les informations de profiling pour toutes les requêtes exécutées après son activation.
Visualiser les temps d'exécution des requêtes
Une fois que le profiling est activé, vous pouvez exécuter vos requêtes SQL normalement. MySQL enregistrera le temps d'exécution de chaque requête.
Pour afficher les résultats des requêtes qui ont été exécutées, vous pouvez utiliser la commande suivante :
SHOW PROFILES;
Cette commande retourne une liste de toutes les requêtes exécutées dans la session active avec leur temps d'exécution. Chaque requête est associée à un identifiant unique et au temps total d'exécution en secondes.
Voici un exemple de ce à quoi pourrait ressembler le résultat :
Query_ID | Duration | Query
---------|----------|----------------------------------------------
1 | 0.000745 | SELECT * FROM users;
2 | 0.003567 | SELECT name, age FROM users WHERE age > 25;
3 | 0.000203 | UPDATE users SET age = 30 WHERE id = 5;
Détail du profiling d'une requête
Pour obtenir un aperçu encore plus détaillé d'une requête spécifique, vous pouvez utiliser la commande suivante :
SHOW PROFILE FOR QUERY [Query_ID];
Remplacez [Query_ID]
par l'identifiant de la requête que vous souhaitez analyser en détail. Cette commande retourne une liste de toutes les étapes de l'exécution de la requête, avec le temps passé dans chaque étape. Voici un exemple de sortie :
Status | Duration
-----------------------------|----------
Starting | 0.000045
Checking query cache | 0.000010
Opening tables | 0.000030
System lock | 0.000005
Optimizing | 0.000008
Statistics | 0.000015
Preparing | 0.000012
Executing | 0.000002
Sending data | 0.000545
End | 0.000004
Query end | 0.000003
Closing tables | 0.000007
Freeing items | 0.000015
Cleaning up | 0.000014
Chaque ligne de ce tableau correspond à une étape de l'exécution de la requête, et la colonne Duration montre combien de temps chaque étape a pris.
Désactiver le profiling
Une fois que vous avez terminé l'analyse de vos requêtes, il est recommandé de désactiver le profiling pour éviter un surcoût inutile sur les performances. Pour ce faire, exécutez simplement la commande suivante :
SET profiling = 0;
Réinitialiser l'historique du profiling
Lorsque vous travaillez avec le profiling sur MySQL/MariaDB, il peut être utile de réinitialiser l'historique des profils pour éliminer les anciennes données et ne conserver que les informations pertinentes pour les requêtes que vous analysez actuellement. Cela peut être particulièrement important si vous souhaitez mesurer précisément les performances après des optimisations.
Pour réinitialiser l'historique du profiling, vous pouvez utiliser les commandes suivantes :
SET @@profiling = 0;
SET @@profiling_history_size = 0;
SET @@profiling_history_size = 100;
SET @@profiling = 1;
Par exemple, SET profiling_history_size = 10;
conservera les 10 dernières requêtes profilées.