Maison  >  Article  >  base de données  >  Quels sont les journaux de requêtes lentes et les suggestions d'optimisation pour apprendre MySQL ?

Quels sont les journaux de requêtes lentes et les suggestions d'optimisation pour apprendre MySQL ?

WBOY
WBOYoriginal
2023-07-30 17:04:531278parcourir

Quels sont les journaux de requêtes lentes et les suggestions d'optimisation pour apprendre MySQL ?

Les requêtes lentes font référence à des instructions de requête qui prennent beaucoup de temps à s'exécuter dans la base de données MySQL, ce qui peut entraîner une diminution des performances du système. Afin de découvrir et de résoudre rapidement les problèmes de requêtes lentes, MySQL fournit un outil de journalisation des requêtes lentes pour aider les développeurs à optimiser les performances en enregistrant les instructions de requêtes lentes, le temps d'exécution et d'autres informations connexes.

1. Activer le journal des requêtes lentes
Pour utiliser la fonction de journal des requêtes lentes, vous devez d'abord définir les paramètres correspondants dans le fichier de configuration MySQL. Dans le fichier de configuration MySQL my.cnf ou my.ini, recherchez la section [mysqld] et ajoutez ou modifiez les paramètres suivants :

slow_query_log = 1 // Activez le journal des requêtes lentes, la valeur par défaut est 0
slow_query_log_file = /var/ log /mysql/slow-query.log // Chemin du fichier journal des requêtes lentes
long_query_time = 1 // Définissez une requête qui prend plus de quelques secondes à s'exécuter en tant que requête lente. La valeur par défaut est de 10 secondes

Enregistrez la configuration. fichier et redémarrez le service MySQL, requête lente Le journal commencera l'enregistrement.

2. Analysez le journal des requêtes lentes
Le journal des requêtes lentes enregistre des informations détaillées sur les instructions de requête dont le temps d'exécution dépasse la définition de long_query_time. Nous pouvons découvrir quelles instructions s'exécutent lentement en analysant le journal des requêtes lentes. Voici un exemple de journal de requêtes lent :

Heure : 2020-01-01T00:00:05.123456Z

Utilisateur@Hôte : root[root] @ localhost [] Id : 1

Query_time : 3.001145 Lock_time : 0.000000 Rows_sent : 1 Rows_examined : 1000

SET timestamp=1577840405;
SELECT * FROM user WHERE age > 30;

Dans le journal, Query_time représente le temps d'exécution de la requête, Lock_time représente le temps de verrouillage de la requête, Rows_sent représente le nombre de lignes envoyées à le client, et Rows_examined représente le nombre de lignes interrogées.

3. Conseils de suggestions d'optimisation
Après avoir analysé le journal des requêtes lentes, nous pouvons effectuer les optimisations correspondantes en fonction des instructions de requête spécifiques et des goulots d'étranglement des performances. Voici quelques conseils d'optimisation couramment utilisés :

  1. Assurez-vous que les index sont corrects : accélérez les opérations de requête en créant des index appropriés. Vous pouvez utiliser l'instruction EXPLAIN pour afficher le plan d'exécution de la requête et déterminer si un index est utilisé.

Exemple :
EXPLAIN SELECT * FROM user WHERE age > 30 ;

  1. Évitez les analyses de tables complètes : réduisez autant que possible les opérations d'analyse de tables complètes, en particulier dans les grandes tables. Vous pouvez réduire le jeu de résultats de requête en ajoutant des index, en optimisant les conditions de requête ou en utilisant la pagination.
  2. Utilisez des types de données appropriés : choisissez des types de données appropriés et évitez d'utiliser des types de données trop grands ou trop petits. Les types de données trop volumineux gaspillent de l'espace de stockage, tandis que les types de données trop petits peuvent entraîner un débordement ou une troncature des données.
  3. Réduisez la quantité de transmission de données : essayez de réduire la quantité de transmission de données dans les résultats de requête, sélectionnez uniquement les champs obligatoires et évitez de renvoyer des données inutiles.
  4. Opérations par lots : combinez plusieurs opérations uniques en opérations par lots pour réduire le nombre de connexions à la base de données et de soumissions de transactions.

Exemple :
INSERT INTO user (name, age) VALUES ('Tom', 20), ('John', 30), ('Alice', 40);

  1. Utiliser des instructions préparées : utiliser le prétraitement Les instructions peuvent améliorer les performances et la sécurité des requêtes.

Exemple :
PREPARE stmt FROM 'SELECT * FROM user WHERE age > ?';
EXECUTE stmt USING 30;

  1. Table partitionnée : pour les grandes tables, elles peuvent être partitionnées en fonction d'un certain champ pour améliorer l'efficacité des requêtes. .

Exemple :
CREATE TABLE utilisateur (id INT, nom VARCHAR(50), âge INT) PARTITION PAR PLAGE (âge) (
PARTITION p0 VALEURS MOINS DE (20),
PARTITION p1 VALEURS MOINS DE (40),
PARTITION p2 VALUES LESS THAN MAXVALUE
);

Résumé
L'apprentissage de la lenteur du journal des requêtes de MySQL et des suggestions d'optimisation est crucial pour améliorer les performances de la base de données. En activant le journal des requêtes lentes, nous pouvons enregistrer les instructions dont le temps d'exécution des requêtes dépasse le seuil prédéfini et effectuer l'optimisation des performances correspondante en analysant le journal des requêtes lentes. L'utilisation raisonnable des index, la réduction du volume de transmission de données, l'utilisation d'instructions de prétraitement, de tables de partition et d'autres techniques d'optimisation peuvent améliorer considérablement l'efficacité des requêtes de base de données et les performances du système.

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