一:查询slow log的状态,如示例代码所示,则slow log已经开启。

  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 | /mysqllog/slow_log/slow_queries_3306.log |
  9. +---------------------+------------------------------------------+
  10. 4 rows in set (0.00 sec)

如果没有开启慢查询日志有以下两种方法:

  1. 在配置文件[mysqld]中添加slow_query_log = ON和long_query_time = 1,然后重启MySQL即可生效。
  2. set global slow_query_log=1; 在线开启。如果MySQL发生重启,就会失效,如果要永久生效,就必选修改配置文件。

二:slow log的日志相关参数详解

slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。

log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log

long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。

log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。

log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值是'FILE'。log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。MySQL数据库支持同时两种日志存储方式,配置的时候以逗号隔开即可,如:log_output='FILE,TABLE'。日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用慢查询日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。

三:如何在线安全的清空慢查询日志

  • 停止slow log
  1. mysql> set global slow_query_log=0;
  2. Query OK, 0 rows affected (0.27 sec)
  1. mysql> show variables like '%slow%';
  2. +---------------------+------------------------------------------+
  3. | Variable_name | Value |
  4. +---------------------+------------------------------------------+
  5. | log_slow_queries | OFF |
  6. | slow_launch_time | 2 |
  7. | slow_query_log | OFF |
  8. | slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log |
  9. +---------------------+------------------------------------------+
  10. 4 rows in set (0.00 sec)
    #检查慢查询日志的状态
  • 为慢查询日志重新设置path路径
  1. mysql> set global slow_query_log_file='/mysqllog/slow_log/slow_queries_3306_new.log';
  2. Query OK, 0 rows affected (0.03 sec)
  • 开启慢查询日志,并设置long_query_time。
  1. mysql> set global slow_query_log=1;
  2. Query OK, 0 rows affected (0.01 sec)
  3. mysql>set global long_query_time=1;
  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 | /mysqllog/slow_log/slow_queries_3306_new.log |
  9. +---------------------+----------------------------------------------+
  10. 4 rows in set (0.00 sec)
  • 检查slow sql 在新的日志文件中
  1. mysql> select sleep(10) as a, 1 as b;
  2. +---+---+
  3. | a | b |
  4. +---+---+
  5. | 0 | 1 |
  6. +---+---+
  7. 1 row in set (10.00 sec)
  8.  
  9. mysql>
  10. [mysql@xxx-xxx ~]$ more /mysqllog/slow_log/slow_queries_3306_new.log
  11. ......
  12. Time Id Command Argument
  13. # Time: 140213 6:44:24
  14. # User@Host: root[root] @ localhost []
  15. # Query_time: 10.000365 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
  16. SET timestamp=1392273864;
  17. select sleep(10) as a, 1 as b;
  • 备份之前的慢查询日志
  1. mv /mysqllog/slow_log/slow_queries_3306.log /mysqlbackup/slow_log/slow_queries_3306.log.bak.20140213

四:分析工具mysqlsla的安装以及使用,mysqlsla是hackmysql.com推出的一款MySQL的日志分析工具,功能非常强大. 数据报表,非常有利于分析慢查询的原因, 包括执行频率, 数据量, 查询消耗等。

  • 在Centos下安装mysqlsla
  1. yum install perl-DBI perl-DBD-MySQL perl-devel -y #安装依赖包
  2. wget ftp://ftp.tw.freebsd.org/pub/distfiles/mysqlsla-2.03.tar.gz
  3. #下载
  4. perl Makefile.PL #预编译
  5. make #编译
  6. make install 安装
    PS:最好把此工具安装在本地的测试服务器上,然后将你的慢查询日志拷贝至本地进行分析,以免影响生产环境数据库。
  • 参数详解
  1. lt:表示日志类型,有slow, general, binary, msl, udl
  2. sf:[+-][TYPE],[TYPE]有SELECT, CREATE, DROP, UPDATE, INSERT,例如”+SELECT,INSERT”,不出现的默认是-,即不包括。
  3. db:要处理哪个库的日志。
  4. top:表示取按规则排序的前多少条。
  5. sort:按某种规则排序,t_sum按总时间排序, c_sum按总次数排序。
  • 示例使用
  1. mysqlsla -lt slow mysql-slow.log
  2. 或者
  3. mysqlsla -lt slow mysql-slow.log -sf “+SELECT -db dbName -top -sort t_sum
  4. 也可以将结果输入到文件中,在windows下用Sublime Text 3查看。
  5. mysqlsla -lt slow /root/slow_queries_1013.log > /tmp/fx.log
  • 分析结果
  1. 总查询次数 (queries total), 去重后的sql数量 (unique)
  2. 输出报表的内容排序(sorted by)
  3. 最重大的慢sql统计信息, 包括 平均执行时间, 等待锁时间, 结果行的总数, 扫描的行总数.
  4. Count, sql的执行次数及占总的slow log数量的百分比.
  5. Time, 执行时间, 包括总时间, 平均时间, 最小, 最大时间, 时间占到总慢sql时间的百分比.
  6. % of Time, 去除最快和最慢的sql, 覆盖率占95%的sql的执行时间.
  7. Lock Time, 等待锁的时间.
  8. % of Lock , %的慢sql等待锁时间.
  9. Rows sent, 结果行统计数量, 包括平均, 最小, 最大数量.
  10. Rows examined, 扫描的行数量.
  11. Database, 属于哪个数据库
  12. Users, 哪个用户,IP, 占到所有用户执行的sql百分比
  13. Query abstract, 抽象后的sql语句
  14. Query sample, sql语句

MySQL慢查询日志分析的更多相关文章

  1. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  2. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  3. MySQL慢查询日志分析提取【转】

    原文:https://www.cnblogs.com/skymyyang/p/7239010.html 一:查询slow log的状态,如示例代码所示,则slow log已经开启. mysql> ...

  4. mysql慢查询日志分析工具(python写的)

    D:\NormalSoftware>python mysql_filter_slow_log.py ./mysql1-slow.log --no-duplicates --sort-avg-qu ...

  5. mysql慢查询日志分析工具mysqldumpslow

    一.mysqldumpslow为mysql自带,安装后既带有该工具. 二.mysqldumpslow经常使用的参数 -s,是order的顺序 al 平均锁定时间 ar 平均返回记录时间 at 平均查询 ...

  6. MySQL 慢查询日志分析工具(pt-query-digest)

    1. 慢查询命令: 是否开启和日志路径:show variables like '%slow_query_log%'; 最大查询时间:show variables like '%query_time% ...

  7. Mysql慢查询日志过程

    原创地址 :http://itlab.idcquan.com/linux/MYSQL/922126.html mysql慢查询日志对于跟踪有问题的查询非常有用,可以分析出代码实现中耗费资源的sql语句 ...

  8. Mysql慢查询和慢查询日志分析

     Mysql慢查询和慢查询日志分析   众所周知,大访问量的情况下,可添加节点或改变架构可有效的缓解数据库压力,不过一切的原点,都是从单台mysql开始的.下面总结一些使用过或者研究过的经验,从配置以 ...

  9. 企业级中带你ELK如何实时收集分析Mysql慢查询日志

    什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...

随机推荐

  1. final关键字(最终的)

    1.fianl关键字可以用来修饰类.属性.方法: 2.final关键字修饰的类不能再继承: 如:String   String类是final修饰的类不能被继承 3.final关键字修饰的方法不能被重写 ...

  2. 用html5调取谷歌地图获取位置

    function getmap(){ if(!navigator.geolocation) throw "Geolocation not supported"; var image ...

  3. (原创)用JAX-WS+Spring实现简单soap规范的webservice

    转载请注明出处:http://www.cnblogs.com/Starshot/p/7050084.html Soap即简单对象访问协议,也可理解为一种用于程序之间通讯的规范,它主要基于XML和htt ...

  4. 表单格式化插件jquery.serializeJSON

    前言 前端在处理含有大量数据提交的表单时,除了使用Form直接提交刷新页面之外,经常碰到的需求是收集表单信息成数据对象,Ajax提交. 而在处理复杂的表单时,需要一个一个区手动判断处理字段值,显得非常 ...

  5. [POI2005]SAM-Toy Cars

    题目描述 Johnny is a little boy - he is only three years old and enjoys playing with toy cars very much. ...

  6. 如何在前端模版引擎开发中避免使用eval函数

    前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用.于是根据自己对模版引擎的理解,定义自己的模版格式,然后,根据自己定义的格式,编写处理函数,将模版标签中的字符串,解析成可执行的字 ...

  7. android网页分享到朋友圈问题求助?

    目前想要实现通过QQ将网页分享到微信好友或朋友圈,看见有些APP是直接分享出去左下角图标显示的是QQ.求助各位大牛提供下思路. 这种功能是怎么实现的.应该不是通过android的系统分享实现的吧?.查 ...

  8. [编织消息框架][netty源码分析]10 ByteBuf 与 ByteBuffer

    因为jdk ByteBuffer使用起来很麻烦,所以netty研发出ByteBuf对象维护管理内存使用ByteBuf有几个概念需要知道1.向ByteBuf提取数据时readerIndex记录最后读取坐 ...

  9. PDO数据库操作类

    <?php include 'common_config.php'; /** * Class Mysql * PDO数据库操作类 */ class Mysql { protected stati ...

  10. 【LeetCode】118. Pascal's Triangle

    题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,R ...