欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql 开发进阶篇系列 41 mysql日志之慢查询日志

程序员文章站 2022-03-31 22:48:40
一.概述 慢查询日志记录了所有的超过sql语句( 超时参数long_query_time单位 秒),获得表锁定的时间不算作执行时间。慢日志默认写入到参数datadir(数据目录)指定的路径下。默认文件名是[hostname]_slow.log,默认超时是10秒,默认不开启慢查询日志。下面查看慢日志的 ......

一.概述

         慢查询日志记录了所有的超过sql语句( 超时参数long_query_time单位 秒),获得表锁定的时间不算作执行时间。慢日志默认写入到参数datadir(数据目录)指定的路径下。默认文件名是[hostname]_slow.log,默认超时是10秒,默认不开启慢查询日志。下面查看慢日志的几个参数:

-- 是否开启慢日志
show  variables  like 'slow_query_log';

  mysql 开发进阶篇系列 41 mysql日志之慢查询日志

-- 慢日志文件记录位置
show variables like 'slow_query_log_file';

  mysql 开发进阶篇系列 41 mysql日志之慢查询日志

-- 慢日志设置超时sql阀值(时间秒) 默认10秒
show variables like 'long_query_time';

  mysql 开发进阶篇系列 41 mysql日志之慢查询日志

-- 慢日志存储方式
show variables  like '%log_output%';

  mysql 开发进阶篇系列 41 mysql日志之慢查询日志

  log_output参数是指日志存储方式。log_output='file'表示将日志存入文件,默认值是'file'。log_output='table'表示将日志存入数据库,这样日志信息就会被写入到mysql.slow_log表中。支持同时两种日志存储方式如:log_output='file,table'。另外:log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。

二. 设置慢日志参数

  下面设置my.cnf配置文件,将slow_query_log=1为开启慢查询记录,将long_query_time=1为记录超时1秒钟的sql语句。
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志

  重启mysqld服务后,在次查询慢日志参数,如下所示:
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志

 

三.演示超时sql以及查看慢日志

  -- 查询超大结果集
  select  * from b limit 1000000

  执行信息如下图所示:

   mysql 开发进阶篇系列 41 mysql日志之慢查询日志

  下面搜索日志中含有select 关键词的慢查询语句:
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志
  下面搜索日志中含有call关键词的存储过程的慢查询语句:
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志

  -- 查询有多少条慢查询记录,可以使用系统变量。下面统计了慢查询共10次。
  show global status like '%slow_queries%';

    mysql 开发进阶篇系列 41 mysql日志之慢查询日志

四. 日志分析工具mysqldumpslow

  当慢日志文件内容超大时,需要对慢查询进行分类汇总,可以使用mysqldumpslow工具。对于sql文本一致的,会视为同一个语句自动统计,如下面统计call调用9次。对于sql文本一致使用参数的,参数变更值使用n来代替。如下图所示:
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志


五. 在线清除慢日志内容

 

flush logs;
-- 在线关闭慢日志
set global slow_query_log=0;
-- 删除日志 rm

    mysql 开发进阶篇系列 41 mysql日志之慢查询日志

--  在线开启慢日志
set global slow_query_log=1;

    删除日志和开启慢日志后,会自动重新重成新的慢日志,新的内容如下图所示 :
    mysql 开发进阶篇系列 41 mysql日志之慢查询日志

 

六. 日志篇总结 

  在日志篇系列里讲到了最常用的4种日志类型:错误日志,二进制日志,查询日志,慢查询日志。 4种日志各有不同用途:
    (1) 系统故障时,建议首先查看错误日志。
    (2) 如果要记录数据的变更,数据备份,数据复制等操作时,二进制日志必须开启 (默认不开启)。
    (3) 如果希望记录数据库发生的任何操作,包括select,需要开启。一般情况不建议打开,影响系统性能(默认不开启)。
    (4) 如果要排查系统性能问题,想找到有性能的sql语句,慢日志则需要开启(默认不开启)。