Maison  >  Article  >  base de données  >  Résumé du code de l'opération de requête lente Mysql

Résumé du code de l'opération de requête lente Mysql

黄舟
黄舟original
2017-03-24 13:36:111222parcourir

L'éditeur suivant vous apportera un résumé des opérations MysqlSlowQuery. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. Suivons l'éditeur pour y jeter un œil

Explication des requêtes lentes MySQL

Le journal des requêtes lentes de MySQL est un type fourni par MySQL Logging , qui est utilisé pour enregistrer les instructions dont le temps de réponse dépasse le seuil dans MySQL, fait spécifiquement référence à SQL dont la durée d'exécution dépasse la valeur long_query_time, qui sera enregistrée dans le journal des requêtes lentes. La valeur par défaut de long_query_time est 10, ce qui signifie exécuter des instructions pendant plus de 10 S. Par défaut, la Base de données MySQL ne démarre pas le journal des requêtes lentes. Nous devons définir ce paramètre manuellement. Bien sûr, s'il n'est pas nécessaire pour le réglage, il n'est généralement pas recommandé de démarrer ce paramètre, car il est tournant. sur le journal des requêtes lentes entraînera ou Plus ou moins aura un certain impact sur les performances. Le journal des requêtes lentes prend en charge l'écriture des enregistrements de journal dans les fichiers et prend également en charge l'écriture des enregistrements de journal dans les tables de base de données ; le journal des requêtes lentes est utilisé pour enregistrer certaines instructions de requête trop lentes, ce qui peut aider les administrateurs à analyser le problème par défaut. à non Pour l'activer, vous devez ajouter une série de paramètres dans le fichier de configuration pour démarrer manuellement

Raison de l'activation de la requête lente Mysql

La base de données est un endroit où des goulots d'étranglement peuvent facilement survenir. De nos jours, Nosql fait tellement l'objet de discussions que tout le monde est probablement déprimé par la base de données. Ce qui affecte le plus la vitesse de MySQL, ce sont ces instructions de requête très lentes qui peuvent être écrites de manière déraisonnable ou qui sont des requêtes conjointes de plusieurs tables sous Big Data, etc., nous devons donc découvrir ces instructions, analyser les raisons et les optimiser. C'est également la raison de la publication de cet article de blog

Activer la méthode de requête lente MySQL

1) Méthode 1, connectez-vous au terminal de la base de données mysql et ouvrez

mysql> show variables like "%long%";    
<SPAN style="COLOR: #ff00ff"> //查看一下默认为慢查询的时间10秒 </SPAN> 
+-----------------+-----------+  
| Variable_name  | Value   |  
+-----------------+-----------+  
| long_query_time | 10.000000 |  
+-----------------+-----------+  
1 row in set (0.00 sec)  
  
mysql> set global long_query_time=1;     
<SPAN style="COLOR: #ff00ff">//设置成1秒,加上global,下次进mysql已然生效</SPAN>  
Query OK, 0 rows affected (0.00 sec)  
 
mysql> show variables like "%slow%";     
<SPAN style="COLOR: #ff00ff"> //查看一下慢查询是不是已经开启 </SPAN> 
+---------------------+---------------------------------+  
| Variable_name    | Value              |  
+---------------------+---------------------------------+  
| log_slow_queries  | OFF               |  
| slow_launch_time  | 2                |  
| slow_query_log   | OFF               |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)  
  
mysql> set slow_query_log=&#39;ON&#39;;          
<SPAN style="COLOR: #ff00ff"> //加上global,不然会报错的</SPAN> 
ERROR 1229 (HY000): Variable &#39;slow_query_log&#39; is a GLOBAL variable and should be set with SET GLOBAL 
mysql> set global slow_query_log=&#39;ON&#39;;      
<SPAN style="COLOR: #ff00ff">//这个参数设置为ON,表示启用慢查询,可以捕获执行时间超过一定数值的SQL语句。</SPAN> 
Query OK, 0 rows affected (0.28 sec)  
  
mysql> show variables like "%slow%";       
<SPAN style="COLOR: #ff00ff">//查看是否已经开启 </SPAN> 
+---------------------+---------------------------------+  
| Variable_name    | Value              |  
+---------------------+---------------------------------+  
| log_slow_queries  | ON               |  
| slow_launch_time  | 2                |  
| slow_query_log   | ON               |  
| slow_query_log_file | /usr/local/mysql/mysql-slow.log |  
+---------------------+---------------------------------+  
4 rows in set (0.00 sec)

Méthode 2. Modifiez le fichier de configuration mysql my.cnf

[root@www ~]# vim /etc/mysql.cnf
Ajoutez le contenu suivant dans la configuration de la zone [mysqld]
......

slow_query_log = 1
      
//开启慢查询日志,将1改为ON也可以
long_query_time = 1
      
//mysql慢查询时间,指定达到多少秒才算慢查询;这里推荐设置超过1秒的执行语句就会被记录到慢查询日志中
slow_query_log_file= /var/lib/mysql/mysql-slow.log
     
//慢查询日志路径。这里slow_query_log_file修改为log-slow-queries 也可以
//主要是上面三行内容,还可以添加下面几行细节性配置
long-queries-not-using-indexes
     
//记录没有使用索引的查询语句
min_examined_row_limit = 1000
    
 //记录查找了多达1000次而引起的慢查询
log-slow-admin-statements
     
  //记录ALTER TABLE等语句引发的慢查询
log-slow-slave-statements       
 //记录从服务器产生的慢查询


Outil d'analyse

L'outil d'analyse enregistre réellement le mysql -slow.log Analysez les données et affichez-les (en fait, vous pouvez également obtenir les informations requises en écrivant vous-même un script shell).

[root@www ~]# cat mysql-slow.log                                                                                                                                                                                                                                      L'état d'exécution des instructions SQL, y compris le temps d'exécution, le temps de verrouillage, etc., donc si vous souhaitez un outil d'analyse dépend de votre profil personnel. Il existe de nombreux outils d'analyse. Ici, je parlerai uniquement de la façon d'utiliser le propre outil d'analyse de requêtes lentes de MySQL, mysqldumpslow.

[root@www ~]# mysqldumpslow -h

/usr/local/mysql/libexec/mysqld, Version: 5.1.26-rc-log (Source distribution). started with:  
Tcp port: 3306 Unix socket: /tmp/mysql.sock  
Time         Id Command  Argument  
# Time: 100814 13:28:30  
# User@Host: root[root] @ localhost []  
# Query_time: 10.096500 Lock_time: 0.045791 Rows_sent: 1 Rows_examined: 2374192  
SET timestamp=1281763710;  
select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15);  
# Time: 100814 13:37:02  
# User@Host: root[root] @ localhost []  
# Query_time: 10.394134 Lock_time: 0.000091 Rows_sent: 1 Rows_examined: 2374192  
SET timestamp=1281764222;  
select count(distinct ad_code) as x from ad_visit_history where ad_code in (select ad_code from ad_list where media_id=15);  
# Time: 100814 13:37:16  
# User@Host: root[root] @ localhost []  
# Query_time: 4.608920 Lock_time: 0.000078 Rows_sent: 1 Rows_examined: 1260544  
SET timestamp=1281764236;  
select count(*) as cou from ad_visit_history where ad_code in (select ad_code from ad_list where id=41) order by id desc;

Exemple :

Option h requires an argument  
ERROR: bad option 
  
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  
  
Parse and summarize the MySQL slow query log. Options are  
  
 --verbose  verbose  
 --debug   debug  
 --help    write this text to standard output  
  
 -v      verbose  
 -d      debug     //查错  
 -s ORDER   what to sort by (t, at, l, al, r, ar etc), &#39;at&#39; is default   //排序方式query次数,时间,lock的时间和返回的记录数来排序  
 -r      reverse the sort order (largest last instead of first)    //倒排序  
 -t NUM    just show the top n queries                    //显示前N多个  
 -a      don&#39;t abstract all numbers to N and strings to &#39;S&#39; 
 -n NUM    abstract numbers with at least n digits within names  //抽象的数字,至 少有n位内的名称 
 -g PATTERN  grep: only consider stmts that include this string   //配置模式 
 -h HOSTNAME hostname of db server for *-slow.log filename (can be wildcard),   //mysql所以机器名或者IP 
 default is &#39;*&#39;, i.e. match all 
 -i NAME   name of server instance (if using mysql.server startup script) 
 -l      don&#39;t subtract lock time from total time      //总时间中不减去锁定时间

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