Je me demande s'il existe un autre moyen de vérifier nos requêtes lentes sans enregistrer la requête lente. Supposons qu'un serveur très occupé ne puisse pas se permettre de consigner beaucoup de données pour économiser de la mémoire et des E/S. Ensuite, existe-t-il un autre moyen de vérifier si j'ai une requête 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 est celle qui prend le plus de temps et de mémoire.
Je viens de commencer l'administration de mysql et je ne sais pas comment gérer cela. Tout conseil sera très apprécié.
Si vous ne souhaitez pas activer le journal des requêtes lentes, j'ai une suggestion
Vous pouvez utiliser pt-query-digest sur un intervalle de temps.
Je l'ai suggéré plusieurs fois dans le DBA StackExchange
Nov 24, 2011
: Effets de performances du journal des requêtes générales MySQLApr 24, 2012
: Enquête sur le pic du débit MySQLJul 26, 2012
: Qu'est-ce qui fonctionne actuellement?Si vous regardez mon Nov 24, 2011
link , j'ai fourni un script Shell que vous pouvez créer pour lancer pt-query-digest .
Vous pouvez exécuter l'instruction suivante dans une 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 selon 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 la même requête plusieurs fois, vous pouvez utiliser le hachage de la requête comme clé unique.