18
0
Bifurcation 0

clarification de la doc sur les slow queries

Cette révision appartient à :
Gregory Colpart 2019-10-16 13:22:49 +02:00
Parent bfd44c9f61
révision 7c81a5d758
1 fichiers modifiés avec 41 ajouts et 43 suppressions

Voir le fichier

@ -714,45 +714,6 @@ mysql> set global max_connections = 350;
> *Note* : on prendra garde à modifier aussi en dur dans la configuration si le changement doit être persistent.
### pt-query-digest
Un outil de Percona disponible dans le paquet `percona-toolkit`, pt-query-digest, permet de faire une analyse des slows query, il suffit de lui passer en paramètre le fichier de log des slows query :
~~~
# pt-query-digest /var/log/mysql/mysql-slow.log
~~~
**ATTENTION** : Si le fichier de slow query est trop lourd, il n'est pas recommandé de l'analyser sur un serveur de production, car l'analyse peut nécessiter un cœur CPU à 100%, pendant quelques minutes.
Cet outil analyse le fichier `mysql-slow.log` et fait un rapport général des requêtes qui prennent le plus de temps, par temps de réponse, pourcentage d’exécution, nombres d'appels et le type de requête.
Exemple :
~~~
# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============== ===== ======= ===== =============
# 1 0x67A347A2812914DF 830.5323 62.8% 41 20.2569 87.06 SELECT foo_bar
# 2 0xC5C7772FD65D8C64 141.2796 10.7% 35 4.0366 0.07 SELECT lignes commandes lignes
# 3 0x6DEF8BB001FA8845 139.9141 10.6% 7 19.9877 0.04 SELECT commandes commandes_remboursements vendeurs_factures_remises paiements livraisons commandes_statut commandes_groupes acheteurs codes_promos adresses pays adresses pays vendeurs adresses pays
# 4 0xC8A44AAD56105646 41.5405 3.1% 17 2.4436 0.02 SELECT produits_tendances vendeurs declinaisons texteproduits produits_tendances
# 5 0xFD38100E607E1331 26.7823 2.0% 2 13.3912 5.07 SELECT OUTFILE commandes_etiquettes
# 6 0xFD7F7A9702EE1C3C 21.4709 1.6% 6 3.5785 0.00 UPDATE commandes
# 7 0xE63D0402530F63BE 9.5435 0.7% 4 2.3859 0.00 UPDATE commandes
# 8 0x4EEE742BBDA4EE47 8.9621 0.7% 2 4.4810 0.02 SELECT OUTFILE vendeurtracking
# 9 0xB28EA31EC4438F2F 8.6173 0.7% 2 4.3087 0.02 SELECT OUTFILE lignes
# 10 0xFFAD96608E3F459B 6.7241 0.5% 2 3.3620 0.38 SELECT produits_tendances vendeurs declinaisons texteproduits produits_tendances
~~~
Puis il détaille, pour chaque requêtes, le temps d’exécution, de lock, de colonnes envoyées et les colonnes examinées, les bases qui sont impacté par la requête, la taille de la requête et la requête complète.
Une astuce pour analyser les requêtes de tout le serveur MySQL et pas seulement les slow query, serait de mettre la valeur `long_query_time=0` pendant quelques heures et de d'analyser le fichier de log avec *pt-query-digest*.
Attention cependant, avec `long_query_time=0` la taille du fichier de logs peux grossir très vite, il faut donc surveiller l'espace disque.
### Lister les variables de configuration
Pour voir la liste de toutes les variables :
@ -820,12 +781,12 @@ mysql> SET GLOBAL GENERAL_LOG=OFF;
### Log des requêtes lentes (slow queries)
Pour débugger les applications lentes, c'est une fonctionnalité intéressante de trouver quelle requête est longue.
Pour cela on peut spécifier quand une requête est considérée comme longue, le chemin où stocker les requêtes, et l'activation des logs.
Pour cela on peut spécifier par exemple que l'on veut avoir toutes les requêtes qui durent plus de 5 secondes :
~~~{.ini}
[mysqld]
long_query_time = 5
slow_query_log = 1
long_query_time = 5
slow_query_log_file = /var/log/mysql/slow.log
~~~
@ -837,14 +798,51 @@ mysql> SET GLOBAL long_query_time=5;
mysql> SET GLOBAL slow_query_log_file= "/var/log/mysql/slow.log";
~~~
Il est également possible de remonter les requêtes n'utilisant pas d'index (qu'importe le temps qu'elle prennent pour s'exécuter), avec le paramètre booléen `log_queries_not_using_indexes`.
Il est également possible de remonter les requêtes n'utilisant pas d'index (qu'importe le temps qu'elle prennent pour s'exécuter), avec le paramètre booléen `log_queries_not_using_indexes` mais nous déconseillons de le faire car cela ajoute de nombreuses requêtes inintéressantes en général.
Pour avoir une meilleure lecture des slow query, on peut utilisé la commande [mysqldumpslow](https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html) :
#### long_query_time=0
Une astuce pour analyser l'ensemble des requêtes et de positionner `long_query_time=0` mais il faut évidemment faire très attention car la taille du fichier de logs peut grossier très vite. C'est intéressant à faire pendant quelques secondes, ou exceptionnellement pendant quelques heures pour une analyse avec `pt-query-digest` par exemple.
#### mysqldumpslow
Pour avoir une meilleure lecture des slow queries, on peut utiliser la commande [mysqldumpslow](https://dev.mysql.com/doc/refman/5.7/en/mysqldumpslow.html) :
~~~
# mysqldumpslow /var/log/mysql/mysql-slow.log
~~~
#### pt-query-digest
On peut aussi utilise la commande `pt-query-digest` disponible dans le paquet `percona-toolkit` afin d'avoir une analyse plus poussée des slow queries :
~~~
# pt-query-digest /var/log/mysql/mysql-slow.log
~~~
**ATTENTION** : Si le fichier de slow query est trop lourd, il n'est pas recommandé de l'analyser sur un serveur de production, car l'analyse peut nécessiter un cœur CPU à 100%, pendant quelques minutes.
Cet outil analyse le fichier `mysql-slow.log` et fait un rapport général des requêtes qui prennent le plus de temps, par temps de réponse, pourcentage d’exécution, nombres d'appels et le type de requête.
Exemple :
~~~
# Profile
# Rank Query ID Response time Calls R/Call V/M Item
# ==== ================== ============== ===== ======= ===== =============
# 1 0x67A347A2812914DF 830.5323 62.8% 41 20.2569 87.06 SELECT foo_bar
# 2 0xC5C7772FD65D8C64 141.2796 10.7% 35 4.0366 0.07 SELECT lignes commandes lignes
# 3 0x6DEF8BB001FA8845 139.9141 10.6% 7 19.9877 0.04 SELECT commandes commandes_remboursements vendeurs_factures_remises paiements livraisons commandes_statut commandes_groupes acheteurs codes_promos adresses pays adresses pays vendeurs adresses pays
# 4 0xC8A44AAD56105646 41.5405 3.1% 17 2.4436 0.02 SELECT produits_tendances vendeurs declinaisons texteproduits produits_tendances
# 5 0xFD38100E607E1331 26.7823 2.0% 2 13.3912 5.07 SELECT OUTFILE commandes_etiquettes
# 6 0xFD7F7A9702EE1C3C 21.4709 1.6% 6 3.5785 0.00 UPDATE commandes
# 7 0xE63D0402530F63BE 9.5435 0.7% 4 2.3859 0.00 UPDATE commandes
# 8 0x4EEE742BBDA4EE47 8.9621 0.7% 2 4.4810 0.02 SELECT OUTFILE vendeurtracking
# 9 0xB28EA31EC4438F2F 8.6173 0.7% 2 4.3087 0.02 SELECT OUTFILE lignes
# 10 0xFFAD96608E3F459B 6.7241 0.5% 2 3.3620 0.38 SELECT produits_tendances vendeurs declinaisons texteproduits produits_tendances
~~~
### Log des dead lock
> *Note* : Seulement possible depuis MySQL 5.6 ou MariaDB 10.