`

Mysql 慢查询日志

阅读更多

mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句,对我们程序的优化有很高的参考。本篇主要将慢查询日志的开启,日志分析,这也是优化SQL程序的一般步骤中至关重要的一步。 

1.mysql慢查询日志 
          打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,linux系统是my.cnf)的[mysqld]下面加上 

 
  1. log-slow-queries=mysql_slow.log  
  2. long_query_time=3  


          其中log-slow-queries为日志的文件名,可以指定目录,如log-slow-queries=D:\mysql_slow.log; long_query_time为定义多长的查询我们定义为慢查询,并记录在log-slow-queries 指定的文件中,在这里我们定义超过3秒的查询进行记录。 
          配置完成以后重启Mysql服务器,执行show variables like '%slow%';查看慢查询日志是否开启,如果slow_query_log和log_slow_queries显示为on,那说明服务器的慢查询日志已           
          经开启了。如下显示: 

 
  1. mysql> show variables like '%slow%';  
  2. +---------------------+----------------+  
  3. | Variable_name       | Value          |  
  4. +---------------------+----------------+  
  5. | log_slow_queries    | ON             |  
  6. | slow_launch_time    | 2              |  
  7. | slow_query_log      | ON             |  
  8. | slow_query_log_file | mysql_slow.log |  
  9. +---------------------+----------------+  
  10. 4 rows in set (0.00 sec)  


slow_launch_time跟慢查询日志没有任何关系, 它代表的是thread create的一个阈值,如果要看 long_query_time,可以用 

 
  1. mysql> show variables like '%long%';  
  2. +-----------------+----------+  
  3. | Variable_name   | Value    |  
  4. +-----------------+----------+  
  5. | long_query_time | 3.000000 |  
  6. +-----------------+----------+  
  7. 1 row in set (0.00 sec)  


  2.mysql慢查询日志分析 
             建表如下图,建表勿要给text加上索引,否则可能出现不了超过3秒的查询,数据表填充了4194304条数据。 
             
Mysql <wbr>慢查询日志

            我们来执行一个超过3秒的查询,如下: 
    

 
  1.      mysql> select * from wei where text='orange';  
  2. +---------+--------+  
  3. | id      | text   |  
  4. +---------+--------+  
  5. 4103519 | orange |  
  6. +---------+--------+  


1 row in set (3.79 sec) 
再执行一个超过3秒的和一个没有超过3秒的: 

 
  1. mysql> select * from wei where text='xishizhaohua';  
  2. Empty set (3.82 sec)  

 

 
  1. [mysql> select * from wei where id=4564;  
  2. +------+--------------------+  
  3. | id   | text               |  
  4. +------+--------------------+  
  5. 4564 | yyyyyyyyyyyyyyyyyy |  
  6. +------+--------------------+  
  7. 1 row in set (0.02 sec)  


可以通过下面的命令查看现在这个session有多少个慢查询: 

Mysql <wbr>慢查询日志  

现在我们可以查看mysql_slow.log(win7默认在C:\ProgramData\MySQL\MySQL Server 5.1\data下面),里边内容如下,内容比较明了,包括查询花费的语句及时间,还包括查询时的时间戳等信息,其中Rows_examined为检查的行数,对我们优化也很有帮助 
# Time: 121017 17:38:54 
# User@Host: root[root] @ localhost [127.0.0.1] 
Query_time: 3.794217 Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 4194304 
SET timestamp=1350466734; 
select * from wei where text='orange'; 
# Time: 121017 17:46:22 
# User@Host: root[root] @ localhost [127.0.0.1] 
Query_time: 3.819219  Lock_time: 0.000000 Rows_sent: 0  Rows_examined: 4194304 
SET timestamp=1350467182; 
select * from wei where text='xishizhaohua'; 

3.优化 
          其实定位到了慢查询语句就已经完成了一大不了,执行explain或者desc命令查看慢查询语句,如下图: 
   
Mysql <wbr>慢查询日志  

          问题很明显,解决方式也很明显,建索引了。 

 
  1. mysql> create index text_index on wei(text);  
  2. Query OK, 4194304 rows affected (1 min 58.07 sec)  
  3. Records: 4194304  Duplicates: 0  Warnings: 0  


然后在执行查询操作,用时明显少了很多。 

 
  1. mysql> select * from wei where text='orange';  
  2. +---------+--------+  
  3. | id      | text   |  
  4. +---------+--------+  
  5. 4103519 | orange |  
  6. +---------+--------+  
  7. 1 row in set (0.33 sec)  

 

 
  1. mysql> select * from wei where text='xishizhaohua';  
  2. Empty set (0.01 sec)  
分享到:
评论

相关推荐

    MySQL慢查询日志

    MySQL慢查询日志

    mysql慢查询日志的使用

    mysql慢查询日志的使用

    Mysql慢查询日志查看

    Mysql慢查询日志查看 文档有慢查询详细内容介绍和查看方法 我自己收藏的一个文档 共享了希望对大家有所帮助

    Mysql慢查询日志_1--如何开启慢查询日志

    Windows下开启MySQL慢查询的方法

    Mysql慢查询日志

    Mysql慢查询日志概念常用参数查询与设定查询慢查询记录数mysqldumpslow工具 概念 Mysql的慢查询是一种日志, 主要用于记录 Mysql中响应时间超过设定的阀值的语句. 常用参数 类型 说明 默认值 slow_query_log ...

    MySQL慢查询日志.docx

    MySQL 有一种日志,叫做慢查询日志,主要就是用来记录一些耗时的查询操 作。通过这个日志我们就可以分析出哪些的操作是影响性能的,我们需要对其 进行一些优化措施。

    wuzhc#zcnote#mysql慢查询日志1

    查看开启状态查看日志文件查看慢查询时间查看日志保存方式查看有多少条慢查询记录修改配置文件配置好后需要重启mysql,试试下面的慢查询:查看慢日志文件:mysql

    MySQL慢查询日志的配置与使用教程

    MySQL慢查询日志是我们在日常工作中经常会遇到的一个功能,MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以...

    MySQL慢查询日志的基本使用教程

    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query...这篇文章主要给大家介绍了关于MySQL慢查询日志的基本使用的相关资料,需要的朋友可以参考下

    mysql慢日志查询

    mysql慢日志查询,介绍查询mysql中哪些是慢查询的内容

    mysqllog:Go中的轻量级MySQL慢查询日志解析器

    mysqllog 该软件包提供了一个简单MySQL慢查询日志解析器。示例:从stdin解析日志并将事件打印为JSON package mainimport ("bufio""encoding/json""fmt""os""github.com/Preetam/mysqllog")func main () {p := & ...

    MySQL-slow-query-log-viewer:用于解析和查看MySQL慢查询日志输出的简单工具

    MySQL慢查询日志查看器这是一个用于解析MySQL慢查询日志并以一种很好的,易于阅读的格式显示它的简单工具。 该工具使用我自己PHP库gumbercules / mysqlslow进行繁重的工作。 我写了这个工具来满足两个需求: 我受够...

    mysql-slow-log-import-to-elasticsearch:将mysql慢查询日志导入elasticsearch进行分析

    mysql-slow-log-import-to-elasticsearch 将mysql慢查询日志导入elasticsearch进行分析 它按锡说的做

    mysql-slow-query-log-parser:PHP库用于解析MySQL慢查询日志

    MySQL的慢查询日志解析器PHP库用于解析MySQL慢查询日志用法使用composer安装: composer require gumbercules/mysqlslow包括名称空间: use Gumbercules\MysqlSlow;实例化新的文件阅读器: $parser = new LogParser...

    线上慢查询日志文档及命令

    mysql慢查询日志文档及命令,操作步骤。用于查询线上mysql sql执行情况,可根据设置过滤sql执行时间大于多少的sql统计情况,工具采用pt-query-degist

    mysql 开启慢查询 如何打开mysql的慢查询日志记录

    mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出当前程序里有很耗费资源的sql语句,那如何打开mysql的慢查询日志记录呢?其实打开mysql的慢查询日志很简单,只需要在mysql的配置文件里(windows系统是my.ini,...

    MySQL优化篇:慢查询日志.pdf

    主要介绍MySQL数据库中慢查询日志的使用流程、使用方式、以及日志分析工具mysqldumpslow的相关内容

    利用MYSQLDUMPSLOW进行慢日志分析

    mysqldumpslow是一个用Perl脚本写的转存储慢日志查询程序。在慢日志文件比较大的时候,用文件查看命令去分析MYSQL慢日志文件,看起来就会比较费劲,也不能快速的统计出需要优化的SQL语句。 使用mysqldumpslow就可以...

Global site tag (gtag.js) - Google Analytics