Maison > Article > base de données > Utilisez MySQL pour analyser les problèmes SQL chronophages
La requête de journal lente de MySQL est un enregistrement de journal fourni par MySQL. Elle enregistre les instructions dont le temps de réponse dépasse le seuil dans MySql, en particulier SQL qui prend plus de temps. que la valeur long_query_time sera enregistrée dans le journal lent. La durée par défaut de long_query_time est 10, ce qui signifie exécuter plus de 10 instructions.
Par exemple, si un SQL est exécuté pendant plus de 5 secondes, même s'il s'agit d'un SQL lent, MySQL enregistrera le SQL qui dépasse 5 secondes. Nous pouvons effectuer une analyse complète en conjonction avec l'explication.
Par défaut, la base de données MySQL n'active pas les journaux de requêtes lents et nous devons définir ce paramètre manuellement. Bien entendu, s'il n'est pas requis pour le réglage, il n'est généralement pas recommandé d'activer ce paramètre, car une journalisation lente aura plus ou moins un certain impact sur les performances.
#查看是否开启show variables like '%slow_query_log%';#开启set global slow_query_log = 1;
L'utilisation de set global slow_query_log=1 pour activer le journal des requêtes lentes ne prendra effet que sur la base de données actuelle et deviendra invalide si MySQL est redémarré. Si vous souhaitez qu'il prenne effet de manière permanente, vous devez modifier le fichier de configuration my.cnf.
Notez qu'après avoir défini le temps de seuil de requête lente, vous ne verrez peut-être pas la valeur changer, c'est-à-dire qu'elle ne prendra pas effet. Dans ce cas, vous devez vous reconnecter ou ouvrir une nouvelle session pour voir la modification. valeur.
show variables like '%long_query_time%'
Ou vous pouvez utiliser la commande suivante sans rouvrir la connexion :
show variables like '%long_query_time%'
Quel SQL sera enregistré par journalisation lente, qui est contrôlée par long_query_time Par défaut, long_query_time Le. la valeur est de 10 secondes, commande :
show variables like '%long_query_time%';
Si le temps d'exécution est exactement égal à long_query_time, il ne sera pas enregistré. En d'autres termes, dans MySQL, il est jugé supérieur à long_query_time, et non supérieur ou égal à.
Vous pouvez utiliser l'instruction suivante pour la tester
SELECT sleep(4)
Si vous définissez long_query_time sur 3 secondes, alors cette instruction sera enregistrée.
Afficher le nombre de logs lents
show global status like '%slow_queries%'
Dans un environnement de production, si vous souhaitez manuellement analyser les journaux, trouver et analyser SQL est évidemment une tâche laborieuse. MySql fournit l'outil d'analyse des journaux mysqldumpslow.
Par exemple :
#得到返回记录集最多的10个SQL Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#得到访问次数最多的10个SQL Mysqldumpslow –s c –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#得到按照时间排序的前10条里面含有左连接的查询 Mysqldumpslow –s t –t 10 –g “left join” D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log#另外建议在使用这些命令时结合|和more使用,否则可能出现爆破情况 Mysqldumpslow –s r –t 10 D:\Program Files\mysql\data\DESKTOP-VN2D5OU-slow.log|more
参数含义 s: 表示按照何种方式排序 c:访问次数 l:锁定时间 r:返回记录 t:查询时间 al:平均锁定时间 t:返回前面多少条的数据 g:后面搭配一个正则表达式
La commande show profile peut analyser la consommation de ressources de l'exécution de l'instruction dans la session en cours. Utilisé pour trouver les goulots d'étranglement SQL qui prennent beaucoup de temps. Il est désactivé par défaut et enregistre les résultats des 15 dernières exécutions.
Vérifiez si elle est activée (afficher les variables telles que « profilage » ;)
Activez la fonction (définissez le profilage = on ;)
Une fois activée, vous pouvez enregistrer l'exécution ultérieure de SQL. Visualisez ensuite les résultats via show profiles :
Analysez plus en détail l'exécution d'une certaine instruction SQL via la commande (show profile cpu, block io for query 3;), par exemple , l'analyse suivante 3 No. Situation SQL.
Quelques paramètres derrière Afficher le profil :
Tous : Afficher toutes les informations générales
Bloc io : afficher la surcharge liée au bloc IO
Commutateurs de contexte : surcharge liée au changement de contexte
Cpu : afficher la surcharge liée au processeur
Mémoire : Afficher les frais généraux liés à la mémoire
Source : Afficher les informations de frais généraux liées à source_function, source_file, source_line
(Ne l'activez jamais dans un environnement de production pour afficher toutes les instructions SQL exécutées)
Commande Set :
set global general_log = 1;#以表的形式输出set global log_output = ‘TABLE’
Après cela, mysql exécute le L'instruction SQL sera enregistrée dans la table mysql.genearl_log, qui peut être visualisée avec la commande suivante :
select * from mysql.general_log;
Elle peut également être configurée dans le fichier de configuration et définie comme suit :
#开启General_log = 1#记录日志文件的路径General_log_file = D://path/logfile#输出格式Log_output=file
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!