Identifiez les requêtes lentes sans journaux de requêtes lentes sur le serveur MySQL
-
26-09-2020 - |
Question
Je me demande s'il existe un autre moyen de vérifier nos requêtes lentes sans enregistrer les requêtes lentes.Supposons que j'ai un serveur très occupé et que je ne puisse pas me permettre d'enregistrer beaucoup de choses pour économiser de la mémoire et des E/S.Alors, existe-t-il un autre moyen de vérifier si ma requête est lente ?Je sais, nous pouvons faire le profilage de la requête, mais nous ne savons toujours pas exactement quoi faire pour identifier quelle requête prend le plus de temps et de mémoire.
Je viens de démarrer l'administration MySQL et je ne sais pas comment gérer cela.Tout conseil sera très apprécié.
La solution
Si vous ne souhaitez pas du tout activer le journal des requêtes lentes, j'ai une suggestion
Vous pouvez utiliser pt-requête-digest sur un intervalle de temps.
Je l'ai suggéré à plusieurs reprises dans DBA StackExchange
Nov 24, 2011
: Effets sur les performances du journal des requêtes générales MySQLApr 24, 2012
: Enquêter sur le pic de débit MySQLJul 26, 2012
: Qu'est-ce qui tourne en ce moment ?
Si tu regardes mon Nov 24, 2011
lien, j'ai fourni un script shell que vous pouvez lancer par crontab pt-requête-digest.
ESSAIE !!!
Autres conseils
Vous pouvez exécuter l'instruction suivante en boucle dans un script qui déclenche l'instruction toutes les 10 secondes par exemple.
mysql -e 'SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where time>10 and command<>"Sleep"'
Vous pouvez le personnaliser pour vous donner plus ou moins d'informations en fonction de la requête que vous émettez.
mysql> desc INFORMATION_SCHEMA.PROCESSLIST;
+---------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| ID | bigint(21) unsigned | NO | | 0 | |
| USER | varchar(16) | NO | | | |
| HOST | varchar(64) | NO | | | |
| DB | varchar(64) | YES | | NULL | |
| COMMAND | varchar(16) | NO | | | |
| TIME | int(7) | NO | | 0 | |
| STATE | varchar(64) | YES | | NULL | |
| INFO | longtext | YES | | NULL | |
| TIME_MS | bigint(21) | NO | | 0 | |
| ROWS_SENT | bigint(21) unsigned | NO | | 0 | |
| ROWS_EXAMINED | bigint(21) unsigned | NO | | 0 | |
+---------------+---------------------+------+-----+---------+-------+
11 rows in set (0.00 sec)
Afin de ne pas enregistrer plusieurs fois la même requête, vous pouvez utiliser le hachage de la requête comme clé unique.