Maison  >  Article  >  base de données  >  Explication détaillée de deux façons d'optimiser et de positionner le SQL inférieur

Explication détaillée de deux façons d'optimiser et de positionner le SQL inférieur

伊谢尔伦
伊谢尔伦original
2017-06-28 14:03:411233parcourir

Localisez les instructions SQL avec une faible efficacité d'exécution grâce aux journaux de requêtes lentes. Lors du démarrage avec l'option --log-slow-queries[=file_name], mysqld écrira un journal contenant tous les temps d'exécution dépassant long_query_time. secondes. Fichiers journaux des instructions SQL. En affichant ce fichier journal, vous pouvez localiser les instructions SQL avec une faible efficacité d'exécution

À propos de l'optimisation de l'efficacité de MySQL, localisez généralement les instructions SQL avec une faible efficacité d'exécution des deux manières suivantes.

Localisez les instructions SQL avec une faible efficacité d'exécution grâce aux journaux de requêtes lentes. Lors du démarrage avec l'option --log-slow-queries[=file_name], mysqld écrira une liste contenant toutes les instructions SQL dont le temps d'exécution dépasse long_query_time secondes. . Fichier journal, localisez le SQL le moins efficace en affichant ce fichier journal.

Le journal des requêtes lentes est enregistré une fois la requête terminée. Par conséquent, lorsque l'application reflète des problèmes d'efficacité d'exécution, l'interrogation du journal des requêtes lentes ne peut pas localiser le problème. Vous pouvez utiliser la commande show processlist pour afficher le MySQL actuel. threads, y compris l'état des threads, s'il faut verrouiller la table, etc., vous pouvez vérifier l'état d'exécution de SQL en temps réel et optimiser certaines opérations de verrouillage de table en même temps.

Donnons un exemple ci-dessous pour illustrer comment localiser les instructions SQL avec une faible efficacité d'exécution grâce aux journaux de requêtes lentes :

Activer les journaux de requêtes lentes, exemple de configuration :

log -slow-queries

Ajoutez les éléments de configuration ci-dessus dans my.cnf fichier de configuration et redémarrez le service mysql, puis la fonction de requête lente mysql prendra effet. Le journal des requêtes lentes sera écrit dans le chemin spécifié par le paramètre DATADIR (répertoire de données). Le nom de fichier par défaut est host_name-slow.log.

Comme les journaux d'erreurs et les journaux de requêtes, le format des enregistrements des journaux de requêtes lentes est également du texte brut et peut être lu directement. L'exemple suivant illustre le processus de configuration et de lecture du journal des requêtes lentes.

(1) Interrogez d’abord la valeur de long_query_time.

mysql> show variables like 'long%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| long_query_time | 10 |
+-----------------+-------+
1 row in set (0.00 sec)

(2) Pour faciliter les tests, le temps de requête lent sera modifié à 5 secondes.

mysql> set long_query_time=5;
Requête OK, 0 ligne affectée (0,02 sec)

(3) Exécutez les deux instructions de requête suivantes dans l'ordre.

La première requête n'apparaîtra pas dans le journal des requêtes lentes car la durée de la requête est inférieure à 5 secondes :

mysql> select count(*) from order2008;
+----------+
| count(*) |
+----------+
| 208 |
+----------+
1 row in set (0.00 sec)

La deuxième requête n'apparaîtra pas dans le journal des requêtes lentes car le temps de requête est supérieur à 5 secondes. Doit apparaître dans le journal des requêtes lentes :

mysql> select count(*) from t_user;
+----------+
| count(*) |
+----------+
| 6552961 |
+----------+
1 row in set (11.07 sec)

(4) Vérifiez le journal des requêtes lentes.

[root@localhost mysql]# more localhost-slow.log
# Time: 081026 19:46:34
# User@Host: root[root] @ localhost []
# Query_time: 11 Lock_time: 0 Rows_sent: 1 Rows_examined: 6552961
select count(*) from t_user;

Dans le journal ci-dessus, vous pouvez constater que le temps de requête de SQL dépasse 5 secondes, tandis que le temps de requête inférieur à 5 secondes n'apparaît pas dans ce journal.
S'il y a beaucoup de contenu enregistré dans le journal des requêtes lentes, vous pouvez utiliser l'outil mysqldumpslow (inclus avec le client MySQL installation ) pour classer et résumer le journal des requêtes lentes. Dans l'exemple suivant, le fichier journal mysql_master-slow.log est classé et résumé, et seuls les résumé résumés sont affichés :

[root@mysql_master mysql_data]# mysqldumpslow mysql_master-slow.log
Reading mysql slow query log from mysql_master-slow.log
Count: 2 Time=11.00s (22s) Lock=0.00s (0s) Rows=1.0 (2), root[root]@mysql_master
select count(N) from t_user;

est entièrement cohérent avec le texte SQL, à l'exception des variablesMysqldumpslow traitera automatiquement les différentes instructions comme la même instruction pour les statistiques, et la valeur de la variable sera remplacée par N. Ce résultat statistique augmentera considérablement l'efficacité des utilisateurs lisant les journaux de requêtes lentes et localisera rapidement le goulot d'étranglement SQL du système.

Remarque : le journal des requêtes lentes nous est très utile pour trouver du SQL présentant des problèmes de performances dans l'application. Il est recommandé, dans des circonstances normales, d'ouvrir ce journal et de vérifier fréquemment l'analyse.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn