Maison >base de données >tutoriel mysql >Analyse simple du journal des requêtes générales MySQL et du journal des requêtes lentes
Ce que cet article vous apporte est une simple analyse du journal des requêtes générales de MySQL et du journal des requêtes lentes. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Les journaux dans MySQL incluent : le journal des erreurs, le journal binaire, le journal des requêtes générales, le journal des requêtes lentes, etc. Ici, nous introduisons principalement deux fonctions couramment utilisées : le journal des requêtes générales et le journal des requêtes lentes.
1) Journal général des requêtes : enregistre les connexions client établies et les instructions exécutées.
2) Journal des requêtes lentes : enregistre toutes les requêtes dont le temps d'exécution dépasse les secondes de longquerytime ou les requêtes qui n'utilisent pas d'index
(1) Journal des requêtes générales
Journal général d'apprentissage Quand lors de l'interrogation, vous devez connaître les commandes communes dans les deux bases de données :
1) afficher des variables telles que '%general%'
peut vérifier si la requête de journal générale actuelle est activée et si le general_log Une valeur ON signifie qu'il est activé, et une valeur OFF signifie qu'il est désactivé (il est désactivé par défaut).
1) afficher des variables telles que '%log_output%';
Afficher le format de la sortie actuelle du journal des requêtes lentes, qui peut être FILE (hostname.log stocké dans le fichier de données de la base de données ), Il peut également s'agir de TABLE (mysql.general_log stocké dans la base de données)
Question : Comment activer le journal général des requêtes MySQL et comment définir le format de sortie général du journal à afficher ?
Activer la requête de journal générale : set global general_log=on ;
Désactiver la requête de journal générale : set global general_log=off;
Définir la sortie générale du journal en mode table : set global log_output='TABLE';
Définissez la sortie générale du journal en mode fichier : set global log_output='FILE';
Définissez la sortie générale du journal en mode table et fichier : set global log_output='FILE ,TABLE';
(Remarque : la commande ci-dessus ne prend effet que actuellement et échouera au redémarrage de MySQL. Si vous souhaitez qu'elle prenne effet de manière permanente, vous devez configurer my.cnf)
La configuration du fichier my.cnf est la suivante :
general_log=1 #Une valeur de 1 signifie activer la requête de journal générale, une valeur de 0 signifie désactiver la requête de journal générale
log_output=FILE,TABLE#Définir le format de sortie du journal général sur les fichiers et les tables
(2) Journal des requêtes lentes
Le journal des requêtes lentes de MySQL est un enregistrement de journal fourni par MySQL . Il est utilisé pour enregistrer les instructions dont le temps de réponse dépasse le seuil dans MySQL, faisant spécifiquement référence au temps d'exécution dépassant la valeur long_query_time, SQL sera enregistré dans le journal des requêtes lentes (le journal peut être écrit dans un fichier ou une table de base de données. Si. les exigences de performances sont élevées, il est recommandé d'écrire un fichier). Par défaut, la base de données MySQL n'active pas les journaux de requêtes lentes. La valeur par défaut de long_query_time est 10 (c'est-à-dire 10 secondes, généralement définie sur 1 seconde), c'est-à-dire que les instructions qui s'exécutent pendant plus de 10 secondes sont des instructions de requête lentes.
De manière générale, les requêtes lentes se produisent dans les grandes tables (par exemple, la quantité de données dans une table est de plusieurs millions) et les champs des conditions de requête ne sont pas indexés pour le moment. les conditions de requête seront L'analyse complète de la table prend long_query_time et
est une instruction de requête lente.
Question : Comment vérifier si le journal des requêtes lentes actuel est activé ?
Entrez la commande dans MySQL :
afficher les variables comme '%quer%';
Maîtrisez principalement les paramètres suivants :
(1) La valeur de slow_query_log est ON pour activer le journal des requêtes lentes et OFF pour fermer le journal des requêtes lentes.
(2) La valeur de slow_query_log_file est le journal des requêtes lentes enregistré dans le fichier (remarque : le nom par défaut est hostname.log. Que le journal des requêtes lentes soit écrit dans le fichier spécifié, vous devez spécifier le Le format du journal de sortie de la requête lente est un fichier, la commande pertinente est : afficher des variables comme '%log_output%' ;
(3) long_query_time spécifie le seuil de requête lente, c'est-à-dire que si le temps d'exécution de l'instruction dépasse le seuil, il s'agit d'une instruction de requête lente. La valeur par défaut est de 10 secondes.
(4) log_queries_not_using_indexes Si la valeur est définie sur ON, toutes les requêtes qui n'utilisent pas d'index seront enregistrées (Remarque : si vous définissez simplement log_queries_not_using_indexes sur ON et slow_query_log sur OFF, ce paramètre ne prendra pas effet. , c'est-à-dire que la condition pour que ce paramètre prenne effet est que la valeur de slow_query_log soit définie sur ON). Généralement, il sera temporairement activé lors du réglage des performances.
Question : Définir le format du journal de sortie de la requête lente MySQL sur fichier ou table, ou les deux ?
Utilisez la commande : show variables like '%log_output%';
Vous pouvez vérifier le format de sortie via la valeur de log_output La valeur ci-dessus est TABLE. Bien sûr, nous pouvons également définir le format de sortie sur texte, ou enregistrer du texte et des tables de base de données en même temps. La commande de configuration est la suivante :
Sortir le journal des requêtes lentes dans la table (c'est-à-dire mysql.slow_log)
set globallog_output='TABLE';
Le journal des requêtes lentes est uniquement généré sous forme de texte (c'est-à-dire : le fichier spécifié par slow_query_log_file)
setglobal log_output ='FILE';
Ici, je recommande à tout le monde un groupe d'apprentissage et d'échange d'architecture. Numéro du groupe de communication et d'apprentissage : 478030634. Il partagera quelques vidéos enregistrées par des architectes seniors : Spring, MyBatis, analyse du code source Netty, principes de haute concurrence, haute performance, distribué, architecture microservice, optimisation des performances JVM, architecture distribuée, etc. sont devenus un système de connaissances nécessaire pour les architectes. Vous pouvez également recevoir des ressources d’apprentissage gratuites, et j’en profite beaucoup jusqu’à présent
Les journaux de requêtes lentes sont générés simultanément sous forme de texte et de tableaux
setglobal log_output='FILE,TABLE';
À propos des données dans la table de journaux de requêtes lentes Analyse du format des données dans le texte :
L'enregistrement du journal des requêtes lentes dans la table myql.slow_log a le format suivant :
Requête lente Le journal est enregistré dans le fichier hostname.log au format suivant :
Vous pouvez voir s'il s'agit une table ou un fichier, il est enregistré spécifiquement : Oui Cette instruction a provoqué la requête lente (sql_text), le temps de requête (query_time), le temps de verrouillage de la table (Lock_time) de l'instruction de requête lente et le nombre de lignes analysées (rows_examined ) et d'autres informations.
Question : Comment interroger le nombre d'instructions de requête lentes actuelles ?
Il existe une variable dans MySQL qui enregistre le nombre d'instructions de requête lentes actuelles :
Entrez la commande : afficher l'état global comme '%slow%';
(Remarque : pour toutes les commandes ci-dessus, si les paramètres sont définis via le shell MySQL, si MySQL est redémarré, tous les paramètres définis seront invalides. Si vous souhaitez prendre effet permanent, les paramètres de configuration doivent être écrits dans le fichier my.cnf).
Point de connaissance supplémentaire : Comment utiliser l'outil d'analyse des journaux de requêtes lentes de MySQL, mysqldumpslow, pour analyser les journaux ?
perlmysqldumpslow –s c –t 10 slow-query.log
Les paramètres spécifiques sont les suivants :
-s indique comment trier, c, t, l, r Ils sont triés en fonction du nombre d'enregistrements, de l'heure, de l'heure de la requête et du nombre d'enregistrements renvoyés. ac, at, al et ar représentent les flashbacks correspondants
-t représente top et les données suivantes ; représente return Combien de lignes devant
-g peuvent être suivies par une correspondance d'expression régulière, qui n'est pas sensible à la casse.
Les paramètres ci-dessus ont les significations suivantes :
Compte :414 La déclaration apparaît
Temps =3,51s (1454) Le temps d'exécution maximum est de 3,51s et le temps total cumulé consommé est de 1454s
Lock=0.0s (0) Le temps maximum d'attente pour le verrou est de 0s et le cumulé ; le temps d'attente pour le verrou est de 0 s ;
Rows=2194,9 (9097604) Le nombre maximum de lignes envoyées au client est de 2194,9 et les fonctions cumulées envoyées au client sont de 90976404
(Remarque : le script mysqldumpslow est écrit en langage Perl, spécifiquement mysqldumpslow (l'utilisation sera discutée plus tard)
Question : Dans le processus d'apprentissage actuel, comment savez-vous que la requête lente définie est efficace ?
C'est très simple. Nous pouvons générer manuellement une instruction de requête lente. Par exemple, si la valeur de notre requête lente log_query_time est définie sur 1, nous pouvons exécuter l'instruction suivante :
selectsleep. (1);
Cette instruction est l'instruction de requête lente. Ensuite, vous pouvez vérifier si cette instruction existe dans le fichier ou la table de sortie du journal correspondant.
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!