SQL Trace enregistre les plans d'exécution et les statistiques d'exécution des instructions SQL de votre cluster PolarDB for MySQL. Cette fonctionnalité permet de détecter les régressions de performance liées aux changements de plans d'exécution et d'identifier les instructions SQL les plus consommatrices de ressources.
Prérequis
Avant de commencer, assurez-vous que votre cluster exécute l'une des versions suivantes :
PolarDB for MySQL 8.0.1, version de révision 8.0.1.1.30 ou ultérieure
PolarDB for MySQL 8.0.2, version de révision 8.0.2.2.12 ou ultérieure
Pour vérifier la version de votre cluster, consultez Interroger la version du moteur.
Limites
SQL Trace ne suit pas les instructions liées aux comptes : CREATE USER, DROP USER et GRANT.
Paramètres
| Paramètre | Description |
|---|---|
loose_sql_trace_type |
Mode de suivi. Valeurs valides : OFF (par défaut), DEMAND, ALL, SLOW_QUERY. Le mode SLOW_QUERY nécessite la version de révision 8.0.1.1.34 ou ultérieure sur PolarDB for MySQL 8.0.1. |
loose_sql_sharing_size |
Mémoire maximale allouée à SQL Sharing, composant sous-jacent de SQL Trace. Valeurs valides : 8388608–1073741824 octets. Valeur par défaut : 134217728 octets. |
loose_sql_trace_plan_expire_time |
Durée de conservation d'un plan d'exécution suivi lorsqu'il n'est pas réutilisé. Si aucune instruction ultérieure n'exécute ce même plan dans cet intervalle, celui-ci est supprimé. Valeurs valides : 0–18446744073709551615 secondes. Valeur par défaut : 604800 secondes (7 jours). |
Choisir un mode de suivi
Sélectionnez un mode selon vos besoins de surveillance :
| Mode | Éléments suivis | Cas d'utilisation |
|---|---|---|
| OFF | Aucun (par défaut) | SQL Trace est inactif |
| DEMAND | Instructions SQL spécifiques ajoutées manuellement | Cibler des requêtes lentes ou critiques identifiées |
| ALL | Toutes les instructions SQL | Investiguer des problèmes de performance inconnus sur l'ensemble du cluster |
| SLOW_QUERY | Requêtes dépassant le seuil de requête lente | Se concentrer uniquement sur les requêtes lentes |
D'après les tests Sysbench (oltp_read_onlyetoltp_read_write) réalisés avec 2 000 tables de 10 000 lignes chacune, sur des clusters de 4 cœurs/8 Go et 8 cœurs/32 Go, le mode ALL dégrade les performances de la base de données de moins de 3 %. SQL Trace utilise des mécanismes sans verrouillage afin de minimiser l'impact en cas de forte concurrence.
Suivre des instructions SQL
Suivre toutes les instructions SQL
Définissez loose_sql_trace_type sur ALL.
Suivre des instructions SQL spécifiques
Définissez
loose_sql_trace_typesur DEMAND.Ajoutez les instructions à suivre à l'aide de dbms_sql.add_trace.
Interroger les statistiques d'exécution
Toutes les instructions suivies sont stockées dans la table information_schema.sql_sharing. Interrogez cette table pour consulter le plan d'exécution et les statistiques de toute instruction suivie.
Obtenir le plan d'exécution d'une instruction spécifique
SELECT * FROM information_schema.sql_sharing WHERE sql_id = polar_sql_id('select * from t');
Identifier les principales instructions SQL
Utilisez ces requêtes pour identifier les instructions nécessitant une attention particulière. Commencez par le temps d'exécution total afin de repérer le coût global le plus élevé, puis exploitez les autres requêtes pour isoler les causes racines.
Top 10 par temps d'exécution total — identifie les instructions présentant le coût cumulé le plus élevé sur l'ensemble des exécutions :
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_EXEC_TIME DESC
LIMIT 10;
Top 10 par temps d'exécution moyen — met en évidence les instructions lentes par appel, même si elles sont peu fréquentes :
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_EXEC_TIME / EXECUTIONS DESC
LIMIT 10;
Top 10 par nombre total de lignes analysées — révèle les instructions générant le plus d'E/S, ce qui indique souvent des index manquants ou des plans de requête inefficaces :
SELECT * FROM information_schema.sql_sharing
WHERE TYPE = 'sql'
ORDER BY SUM_ROWS_EXAMINED DESC
LIMIT 10;
Gérer les instructions suivies et les statistiques
Supprimer des instructions suivies
Pour arrêter le suivi d'instructions spécifiques ajoutées en mode DEMAND :
Supprimez par texte d'instruction à l'aide de dbms_sql.delete_trace.
Supprimez par ID SQL à l'aide de dbms_sql.delete_trace_by_sqlid.
Réinitialiser les statistiques
Pour réinitialiser toutes les statistiques dans information_schema.sql_sharing, utilisez dbms_sql.reset_trace_stats.
Effacer et recharger
Pour effacer toutes les données de information_schema.sql_sharing, utilisez dbms_sql.flush_trace.
Pour recharger les modèles SQL depuis mysql.sql_sharing et reprendre la collecte des statistiques pour les instructions précédemment ajoutées, utilisez dbms_sql.reload_trace.