web-dev-qa-db-fra.com

Identifiez les requêtes lentes sans journaux de requêtes lentes sur le serveur mysql

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é.

8
Astha

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

Si vous regardez mon Nov 24, 2011 link , j'ai fourni un script Shell que vous pouvez créer pour lancer pt-query-digest .

ESSAIE !!!

5
RolandoMySQLDBA

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.

4
Jehad Keriaki