精华内容
下载资源
问答
  • mysql的slow_query_log慢查询日志分析工具说明,主要用来进行慢查询日志的linux平台分析输出结果文档进行MySQL的调优/优化数据库
  • MySQL中的日志包括:错误日志、二进制日志、通用查询日志慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志慢查询日志,需要的朋友可以参考下
  • MySQL慢查询日志分析详解

    千次阅读 2019-06-27 12:59:56
    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S...

    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10S以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

    MySQL慢查询定义

    分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。

    MySQL慢查询的体现

    慢查询主要体现在慢上,通常意义上来讲,只要返回时间大于 >1 sec上的查询都可以称为慢查询。慢查询会导致CPU,内存消耗过高。数据库服务器压力陡然过大,那么大部分情况来讲,肯定是由某些慢查询导致的。

    mysql慢查询开启

    1.查看当前慢查询设置情况

    #查看慢查询时间,默认10s,建议降到1s或以下
    mysql> show variables like "long_query_time";
    +-----------------+----------+
    | Variable_name   | Value    |
    +-----------------+----------+
    | long_query_time | 1.000000 |
    +-----------------+----------+
    1 row in set (0.00 sec)
    
    #查看慢查询配置情况,其中,slow_query_log的值是on就是已开启功能了。
    mysql> show variables like "%slow%";
    +-----------------------------------+----------------------+
    | Variable_name                     | Value                |
    +-----------------------------------+----------------------+
    | log_slow_admin_statements         | OFF                  |
    | log_slow_filter                   |                      |
    | log_slow_rate_limit               | 1                    |
    | log_slow_rate_type                | session              |
    | log_slow_slave_statements         | OFF                  |
    | log_slow_sp_statements            | ON                   |
    | log_slow_verbosity                |                      |
    | max_slowlog_files                 | 0                    |
    | max_slowlog_size                  | 0                    |
    | slow_launch_time                  | 2                    |
    | slow_query_log                    | ON                   |
    | slow_query_log_always_write_time  | 10.000000            |
    | slow_query_log_file               | /tmp/slow_querys.log |
    | slow_query_log_use_global_control |                      |
    +-----------------------------------+----------------------+
    14 rows in set (0.01 sec)
    

    2.如何开启慢查询功能
    方法一:在服务器上找到mysql的配置文件my.cnf , 然后再mysqld模块里追加一下内容,这样的好处是会一直生效,不好就是需要重启mysql进程。

    vim my.cnf
    [mysqld]
    slow_query_log = ON
    #定义慢查询日志的路径
    slow_query_log_file = /tmp/slow_querys.log
    #定义查过多少秒的查询算是慢查询,我这里定义的是1秒,5.6之后允许设置少于1秒,例如0.1秒
    long_query_time = 1
    #用来设置是否记录没有使用索引的查询到慢查询记录,默认关闭,看需求开启,会产生很多日志,可动态修改
    #log-queries-not-using-indexes
    管理指令也会被记录到慢查询。比如OPTIMEZE TABLE, ALTER TABLE,默认关闭,看需求开启,会产生很多日志,可动态修改
    #log-slow-admin-statements
    

    然后重启mysql服务器即可,这是通过一下命令看一下慢查询日志的情况:

    tail -f /tmp/slow_querys.log
    

    方法二:通过修改mysql的全局变量来处理,这样做的好处是,不用重启mysql服务器,登陆到mysql上执行一下sql脚本即可,不过重启后就失效了。

    #开启慢查询功能,1是开启,0是关闭
    mysql> set global slow_query_log=1;
    #定义查过多少秒的查询算是慢查询,我这里定义的是1秒,5.6之后允许设置少于1秒,例如0.1秒
    mysql> set global long_query_time=1;
    #定义慢查询日志的路径
    mysql> set global slow_query_log_file='/tmp/slow_querys.log';
    #关闭功能:set global slow_query_log=0;
    然后通过一下命令查看是否成功
    mysql> show variables like 'long%'; 
    mysql> show variables like 'slow%';
    #设置慢查询记录到表中
    #set global log_output='TABLE';
    

    特别要注意的是long_query_time的设置,5.6之后支持设置低于0.1秒,所以记录的详细程度,就看你自己的需求,数据库容量比较大的,超过0.1秒还是比较多,所以就变得有点不合理了。

    MYSQL慢查询日志的记录定义

    直接查看mysql的慢查询日志分析,比如我们可以tail -f slow_query.log查看里面的内容

    tail -f  slow_query.log
    # Time: 110107 16:22:11
    # User@Host: root[root] @ localhost []
    # Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774
    SET timestamp=1294388531;
    select count(*) from ep_friends;
    

    字段意义解析:

    第一行,SQL查询执行的时间 第二行,执行SQL查询的连接信息,用户和连接IP 第三行,记录了一些我们比较有用的信息,如下解析:
    - Query_time,这条SQL执行的时间,越长则越慢
    - Lock_time,在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间
    - Rows_sent,查询返回的行数
    - Rows_examined,查询检查的行数,越长就当然越费时间
    第四行,设置时间戳,没有实际意义,只是和第一行对应执行时间。
    第五行及后面所有行(第二个# Time:之前),执行的sql语句记录信息,因为sql可能会很长。

    MYSQL慢查询日志分析方法

    虽然慢查询日志已经够清晰,但是往往我们的日志记录到的不是只有一条sql,可能有很多很多条,如果不加以统计,估计要看到猴年马月,这个时候就需要做统计分析了。

    方法一:使用mysql程序自带的mysqldumpslow命令分析
    例如:
    mysqldumpslow -s c -t 10 /tmp/slow-log
    这会输出记录次数最多的10条SQL语句,得出的结果和上面一般慢查询记录的格式没什么太大差别,这里就不展开来详细解析了。

    参数解析:
    -s:是表示按照何种方式排序,子参数如下:
        c、t、l、r:分别是按照记录次数、时间、查询时间、返回的记录数来排序,
        ac、at、al、ar:表示相应的倒叙;
    -t:返回前面多少条的数据,这里意思就是返回10条数据了(也可以说是前十)
    -g:后边可以写一个正则匹配模式,大小写不敏感的,比如:
        /path/mysqldumpslow -s r -t 10 /tmp/slow-log,得到返回记录集最多的10个查询。
        /path/mysqldumpslow -s t -t 10 -g “left join” /tmp/slow-log,得到按照时间排序的前10条里面含有左连接的查询语句。
    

    方法二:使用pt(Percona Toolkit)工具的pt-query-digest进行统计分析。
    这个是由Percona公司出品的一个用perl编写的脚本,只有安装上pt工具集才会存在,有兴趣的朋友就要先安装pt工具了。直接分析慢查询文件,执行如下:

    pt-query-digest slow_querys.log >t.txt
    

    因为记录里还是可能有很多sql在,看起来还是费劲,所以建议输出到文件来看了,具体不多过多介绍。

    参考资料: https://blog.csdn.net/enweitech/article/details/80239189
    https://blog.51cto.com/arthur376/1948944

    展开全文
  • 慢查询日志分析

    万次阅读 2014-10-20 10:03:12
    慢查询日志 打开慢查询日志 慢查询日志,顾名思义就是记录执行比较慢查询日志。 查看是否开启慢查询日志: show variables like '%slow%'; 打开慢查询日志。修改MySQL的配置文件my.cn一般是...

    慢查询日志

    一篇好文章,学习保存。。。。

    打开慢查询日志

    慢查询日志,顾名思义就是记录执行比较慢查询的日志。

    查看是否开启慢查询日志:

    show variables like '%slow%';

    打开慢查询日志。修改MySQL的配置文件my.cn一般是在/etc目录下面,加上下面三行配置后重启MySQL。

    slow_query_log = ON
    slow_launch_time = 2
    slow_query_log_file = /usr/local/mysql/data/slow_query.log

    slow_launch_time只能精确到秒,如果需要更精确可以使用一些第三方的工具比如后面介绍的pt-query-digest。

    注意:我这里用的MySQL版本是5.6,不同版本的MySQL开启慢查询的配置是不同的,比如5.6之前的某些版本是ong_query_time, long_query_time和log-slow-queries。可以先在终端执行show variables like '%slow%';查看下当前版本具体配置是什么。

    也可以在终端通过设置全局变量来打开慢查询日志:

    set  @@global.slow_query_log = ON;

    保存慢查询日志到表中

    MySQL支持将慢查询日志保存到mysql.slow_log这张表中。通过@@global.log_output可以设置默认为TABLE,FILE和TABLE只能同时使用一个。

    set @@global.log_output='TABLE';

    我们可以使用下面的语句来模拟慢查询:

    select sleep(10);

    慢查询日志分析

    1、可以使用MySQL自带的mysqldumpslow工具。使用很简单,可以跟-help来查看具体的用法。

    # -s:排序方式。c , t , l , r 表示记录次数、时间、查询时间的多少、返回的记录数排序;
    #                             ac , at , al , ar 表示相应的倒叙;
    # -t:返回前面多少条的数据;
    # -g:包含什么,大小写不敏感的;
    mysqldumpslow -s r -t 10  /slowquery.log     #slow记录最多的10个语句
    mysqldumpslow -s t -t 10 -g "left join"  /slowquery.log     #按照时间排序前10中含有"left join"

    2、可以导到mysql.slow_query表中,然后通过sql语句进行分析。

    3、使用第三方工具,下面会有介绍。

     

    Percona Toolkit介绍

    percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务。这些任务包括:

    • 检查master和slave数据的一致性
    • 有效地对记录进行归档
    • 查找重复的索引
    • 对服务器信息进行汇总
    • 分析来自日志和tcpdump的查询
    • 当系统出问题的时候收集重要的系统信息

    安装

    安装percona-toolkit非常简单,到官网下载.tar.gz包:

    wget percona.com/get/percona-toolkit.tar.gz
    tar -zxvf percona-toolkit-2.2.5.tar.gz

    然后依次执行下面的命令:

    perl Makefile.PL
    make
    make test
    make install

    默认的会被安装在/usr/local/bin目录下。执行man percona-toolkit可以查看安装了哪些工具。

    运行工具可能会遇到下面的错误:

    这是因为缺少相应包,.pm包实际上perl的包,运行下面的命令安装即可:

    yum install -y perl-Time-HiRes

    如果安装过程中出现” Error Downloading Packages”错误,尝试yum clean all后再安装。使用其Percona Toolkit中其他工具也可能会遇到类似的问题,按照提示安装相应的perl包就可以了。

    Percona Toolkit整个工具箱提供了非常多实用的工具,具体的使用方法可以参看官方文档

    下面有选择的给大家介绍几个有用的工具。

    pt-query-digest

    pt-query-digest可以从普通MySQL日志,慢查询日志以及二进制日志中分析查询,甚至可以从SHOW PROCESSLIST和MySQL协议的tcpdump中进行分析,如果没有指定文件,它从标准输入流(STDIN)中读取数据。

    最简单的用法如下:

    pt-query-digest slow.logs

    输出信息大致如下:

    整个输出分为三大部分:

    1、整体概要(Overall)

    这个部分是一个大致的概要信息(类似loadrunner给出的概要信息),通过它可以对当前MySQL的查询性能做一个初步的评估,比如各个指标的最大值(max),平均值(min),95%分布值,中位数(median),标准偏差(stddev)。这些指标有查询的执行时间(Exec time),锁占用的时间(Lock time),MySQL执行器需要检查的行数(Rows examine),最后返回给客户端的行数(Rows sent),查询的大小。

    2、查询的汇总信息(Profile)

    这个部分对所有”重要”的查询(通常是比较慢的查询)做了个一览表:

    每个查询都有一个Query ID,这个ID通过Hash计算出来的。pt-query-digest是根据这个所谓的Fingerprint来group by的。举例下面两个查询的Fingerprint是一样的都是select * from table1 where column1 = ?,工具箱中也有一个与之相关的工具pt-fingerprint。

    select * from table1 where column1 = 2
    select * from table1 where column1 = 3
    • Rank整个分析中该“语句”的排名,一般也就是性能最常的。
    • Response time  “语句”的响应时间以及整体占比情况。
    • Calls 该“语句”的执行次数。
    • R/Call 每次执行的平均响应时间。
    • V/M 响应时间的差异平均对比率。

    在尾部有一行输出,显示了其他2个占比较低而不值得单独显示的查询的统计数据。

    3、详细信息

    这个部分会列出Profile表中每个查询的详细信息:

    包括Overall中有的信息、查询响应时间的分布情况以及该查询”入榜”的理由。

    pt-query-digest还有很多复杂的操作,这里就不一一介绍了。比如:从PROCESSLIST中查询某个MySQL中最慢的查询:

    pt-query-digest –processlist h=host1

    从tcpdump中分析:

    tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 port 3306 > mysql.tcp.txt
    pt-query-digest --type tcpdump mysql.tcp.txt

    从一台机器上讲slow log保存到另外一台机器上待稍后详细分析:

    pt-query-digest --review h=host2 --no-report slow.log

    还可以跟一些过滤条件。详见官方文档:http://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html

    另外结合一些第三方工具还能生成相应的报表,可以参考这里:http://biancheng.dnbcw.info/mysql/433514.html

    建议:当slow log很大的时候最好还是将日志文件移到其他机器上进行分析。

     

    pt-index-usage

    这个工具主要是用来分析查询的索引使用情况。

    pt-index-usage slow_query.log --h localhost --password 123456

    详细的用法 –help查看再对照官网就差不再赘述。

    注意使用这个工具需要MySQL必须要有密码,另外运行时可能报找不到/var/lib/mysql/mysql.sock的错,简单的从/tmp/mysql.sock链接一个就行了。

    重点要说明的是pt-index-usage只能分析慢查询日志,所以如果想全面分析所有查询的索引使用情况就得将slow_launch_time设置为0,因此请谨慎使用该工具,线上使用的话最好在凌晨进行分析,尤其分析大量日志的时候是很耗CPU的。

    整体来说这个工具是不推荐使用的,要想实现类似的分析可以考虑一些其他第三方的工具,比如:mysqlidxchx, userstat和check-unused-keys。网上比较推荐的是userstat,一个Google贡献的patch。

    Oracle是可以将执行计划保存到性能视图中的,这样分析起来可能更灵活,但是目前我还没找到MySQL中类似的做法。

     

    pt-upgrade

    这个工具用来检查在新版本中运行的SQL是否与老版本一样,返回相同的结果,最好的应用场景就是数据迁移的时候。

    pt-upgrade h=host1 h=host2 slow.log

     

    pt-query-advisor 

    静态查询分析工具。能够解析查询日志、分析查询模式,然后给出所有可能存在潜在问题的查询,并给出足够详细的建议。这个工具好像2.2的版本给去掉了,有可能是因为对性能影响比较大新版本直接去掉了。

    总结:上面这些工具最好不要直接在线上使用,应该作为上线辅助或故障后离线分析的工具,也可以做性能测试的时候配合着使用。

     

    SHOW PROFILE

    SHOW PROFILE是Google高级架构师Jeremy Cole贡献给MySQL社区的,它可以用来MySQL执行语句时候所使用的资源。默认是关闭的,需要打开执行下面的语句:

    set profiling = 1;#这个命令只在本会话内起作用。

    执行简单的SHOW PROFILES可以看到打开profiling之后所有查询的执行时间。

    执行SHOW PROFILE [TYPE] FOR QUERY Query_ID可以看到MySQL执行某个查询各个步骤的各项性能指标的详细信息:

    如果没有指定FOR QUERY则显示最近一条查询的详细信息。TYPE是可选的,有以下几个选项:

    • ALL 显示所有性能信息
    • BLOCK IO 显示块IO操作的次数
    • CONTEXT SWITCHES 显示上下文切换次数,不管是主动还是被动
    • CPU 显示用户CPU时间、系统CPU时间
    • IPC 显示发送和接收的消息数量
    • MEMORY [暂未实现]
    • PAGE FAULTS 显示页错误数量
    • SOURCE 显示源码中的函数名称与位置
    • SWAPS 显示SWAP的次数

    MySQL在执行查询语句的时候会有很多步骤,这里就不一一赘述了,用到的时候网上搜下就行。需要特别说明的是Sending data这个步骤,给人感觉是MySQL把数据发送给客户端的耗时,其实不然,这个步骤包括了MySQL内部各个存储之间复制数据的过程,比如硬盘的寻道。

    总结:前面的慢查询日志分析更像是对整个MySQL查询情况做一个全面的检查,而SHOW PROFILE则是对单个查询语句的剖析,通常当现网出现问题时应该结合二者。使用慢查询分析定位到具体的查询,使用SHOW PROFILE定位到具体的问题,是Sending data比较耗时还是System lock比较耗时...

     

    performance_schema

    这两个库保存了MySQL的一些性能和元数据相关的信息,其中performance_schema是MySQL5.5才新增的,上面提到的很多工具其实利用了这个库的信息。比如SHOW PROFILE ALL FOR QUERY 2:的信息还可以通过下面的查询获取:

    SELECT * FROM information_schema.profiling WHERE query_id = 2 ORDER BY seq;

    利用performance_schema还可以做一些更灵活的统计:

    复制代码
    SET @query_id = 1;
    SELECT STATE,SUM(DURATION) AS Total_R,
        ROUND(100*SUM(DURATION)/(SELECT SUM(DURATION) FROM INFORMATION_SCHEMA.PROFILING
        WHERE QUERY_ID = @query_id),2) AS Pct_R,
        COUNT(*) AS Calls,
        SUM(DURATION)/COUNT(*) AS "R/Call"
    FROM INFORMATION_SCHEMA.PROFILING
    WHERE QUERY_ID = @query_id
    GROUP BY STATE
    ORDER BY Total_R DESC;
    复制代码

    这个简单的查询可以在《高性能MySQL第三版》中找到,可它能统计SHOW PROFILE各个步骤的耗时、耗时占比、调用API次数以及每次的平均耗时。在《高性能MySQL第三版》中还提到了很多有用的工具(SHOW STATUS,SHOW PROCESSLIST...)包括使用方法,强烈推荐这本书。

    展开全文
  • 主要介绍了MySQL慢查询日志分析的实例教程,通过设置参数从慢查询日志开始分析性能问题的原因,需要的朋友可以参考下
  • Redis必学(六)慢查询日志分析

    千次阅读 2019-04-22 22:09:34
    慢查询日志

    1 慢查询概念

        慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(慢查询ID,发生时间戳,耗时,命令的详细信息)记录下来。慢查询日志帮助开发和运维人员定位系统存在的慢操作。
        特别注意,慢查询的所针对的时间,只是面向命令执行的时间,不报错发送请求,排队和返回的时间。

    2 参数

        慢查询的主要的相关参数有两个,分别为:

     1. showlog-log-slower-than
     2. slowlog-max-len
    

    第一个参数指的是:执行是时间超过多少微秒的命令将会被记录到日志上。
    比如,这个值是100,那么执行时间超过100微妙的命令就会被记录在慢查询日志
    第二个参数指的是:服务器最多保存多少条慢查询日志。
    服务器使用FIFO的方式保存多条查询日志,当服务器存储的慢查询日志数量等于showlog-max-len选项时,服务器在添加一条新的慢查询日志之前,会先将最旧的慢查询日志删除。

    3 命令

    1. SLOWLOG GET
      通过该命令查看服务器所保存的慢查询日志。
    2. SLOWLOG LEN
      获取慢查询列表当前的长度
    3. SLOWLOG RESET
      对慢查询列表清理(重置)

    对于线上slow-max-len配置的建议:线上可加大slow-max-len的值,记录慢查询存长命令时redis会做截断,不会占用大量内存,线上可设置1000以上

    对于线上slowlog-log-slower-than配置的建议:默认为10毫秒,根据redis并发量来调整,对于高并发比建议为1毫秒

    展开全文
  • MySQL中的日志包括:通用查询日志慢查询日志、错误日志、二进制日志等等。这里主要记录一下两种比较常用的日志:通用查询日志慢查询日志。 (1)通用查询日志:记录建立的客户端连接和执行的语句。 (2)...

    MySQL中的日志包括:通用查询日志、慢查询日志、错误日志、二进制日志等等。这里主要记录一下两种比较常用的日志:通用查询日志和慢查询日志。

    (1)通用查询日志:记录建立的客户端连接和执行的语句。

    (2)慢查询日志:记录所有执行时间超过long_query_time 秒的所有查询或者不使用索引的查询。

     

    一、通用查询日志:

    1、查看当前通用日志查询是否开启:

     show variables like '%general%';

     

     如果general_log 的值为ON则为开启,为OFF则为关闭(默认关闭)

    2、查看通用日志的输出格式:

    show variables like ‘%log_output%’;

     

    通用查询日志输出的格式可以是FILE(存储在数据库的数据文件中的hostname.log),也可以是TABLE(存储在数据库中的mysql.general_log)

    3、开启MySQL通用查询日志 与 设置通用日志输出方式:

    set global general_log=on;  ##开启通用日志查询

    set global general_log=off;  ##关闭通用日志查询

    set global log_output='File;  ##设置通用日志文件输出为文件方式

    set global log_output='TABLE';  ##设置通用日志文件输出为表方式

    set global log_output='File,TABLE';  ##设置通用日志文件输出为文件和表方式

     (注意:上述命令只对当前生效,当MySQL重启失效,如果要永久生效,需要配置my.cnf或者my.ini文件,见第5点)

    4、日志输出效果图:

    (1)记录到mysql.general_log表中的数据如下:

    select * from mysql.general_log;

    记录到本地中的.log中的格式如下:

    5、修改配置文件:

    在my.cnf 或者my.ini 文件的 [mysqld]下的下方加入:

    general_log=1  #为1表示开启通用日志查询,值为0表示关闭通用日志查询

    log_output=FILE,TABLE#设置通用日志的输出格式为文件和表

     

     

    二、慢查询日志:

    MySQL的慢查询日志用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过 long_query_time 值的SQL,则会被记录到慢查询日志中(日志可以写入文件或者数据库表,如果对性能要求高的话,建议写文件)。默认情况下,MySQL数据库是不开启慢查询日志的,long_query_time的默认值为10(即10秒,通常设置为1秒),即运行10秒以上的语句是慢查询语句。

    一般来说,慢查询发生在大表(比如:一个表的数据量有几百万),且查询条件的字段没有建立索引,此时,要匹配查询条件的字段会进行全表扫描,耗时查过long_query_time,则为慢查询语句。

    默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。

    1、查询慢查询日志的开启情况:

    show variables like '%quer%';

    主要掌握以下的几个参数:

    ①slow_query_log 的值为ON为开启慢查询日志,OFF则为关闭慢查询日志。

    ②slow_query_log_file 的值是记录的慢查询日志到文件中路径(注意:默认名为主机名.log,慢查询日志是否写入指定文件中,需要指定慢查询的输出日志格式为文件,相关命令为:show variables like ‘%log_output%’;去查看输出的格式)。

    ③long_query_time 指定了慢查询的阈值,即如果执行语句的时间超过该阈值则为慢查询语句,默认值为10秒。

    ④log_queries_not_using_indexes 如果值设置为ON,则会记录所有没有利用索引的查询(注意:如果只是将log_queries_not_using_indexes设置为ON,而将slow_query_log设置为OFF,此时该设置也不会生效,即该设置生效的前提是slow_query_log的值设置为ON),一般在性能调优的时候会暂时开启。

    2、慢查询相关配置(临时):

    如果都是通过MySQL的shell将参数设置进去,重启MySQL后,所有设置好的参数将失效,如果想要永久的生效,需要将配置参数写入my.cnf文件中。

    开启慢查询日志设置:

    set global slow_query_log='ON'; 

    set global slow_query_log='OFF';  ##关闭慢查询日志 

    设置慢查询日志存放的位置:

    set global slow_query_log_file='/usr/local/mysql/data/slow.log';

    设置超时记录的阈值:

    set long_query_time = 1;

    3、慢查询相关配置(永久):

    在my.cnf 或者my.ini 文件的 [mysqld]下的下方加入以下配置,重启MySQL服务:

    [mysqld]
    slow_query_log = ON
    slow_query_log_file = /usr/local/mysql/data/slow.log
    long_query_time = 1

    4、设置慢查询存储的方式(默认是none):

    set global log_output='File;  ##设置通用日志文件输出为文件方式

    set global log_output='TABLE';  ##设置通用日志文件输出为表方式

    set global log_output='File,TABLE';  ##设置通用日志文件输出为文件和表方式

    5、执行测试sql语句:

    select sleep(2);

    6、慢查询日志记录:

    (1)慢查询的日志记录myql.slow_log表中,格式如下:

    select * from mysql.slow_log;   

    慢查询的日志记录到hostname.log文件中,格式如下:

    可以看到,不管是表还是文件,都具体记录了:是那条语句导致慢查询(sql_text),该慢查询语句的查询时间(query_time),锁表时间(Lock_time),以及扫描过的行数(rows_examined)等信息。

    7、查询当前慢查的语句的个数:

    show global status like '%slow%';

     

    三、使用慢查询日志分析工具mysqldumpslow分析日志:

    我们通过查看慢查询日志可以发现,很乱,数据量大的时候,可能一天会产生几个G的日志,根本没有办法去清晰明了的分析。所以,这里,我们采用MySQL自带的慢查询日志分析工具析日志 mysqldumpslow工具进行分析。

    查看 mysqldumpslow 的帮助信息:mysqldumpslow --help

    -s: 表示按何种方式排序:
      c: 访问次数
      l: 锁定时间
      r: 返回记录
      t: 查询时间
      al: 平均锁定时间
      ar: 平均返回记录数
      at: 平均查询时间

    -t: 返回前面多少条的数据;

    -g: 后边搭配一个正则匹配模式,大小写不敏感的。

    得到返回记录集最多的10个SQL:

    mysqldumpslow -s r -t 10 /var/lib/mysql/show.log

    得到访问次数最多的10个SQL:

    mysqldumpslow -s c -t 10 /var/lig/mysql/show.log

    得到按照时间排序的前10条里面含有左连接的查询语句:

    mysqldumpslow -s t -t 10 -g "left join" /var/lig/mysql/show.log

    另外建议在使用这些命令时结构 | 和more使用,否则有可能出现爆屏情况:

    mysqldumpslow -s r -t 10 /var/lig/mysql/show.log | more

     

    相关博客:

    https://blog.csdn.net/timchen525/article/details/75268151

     

    展开全文
  • 0、首先查看当前是否开启慢查询: (1)快速办法,运行sql语句 show VARIABLES like %slow% (2)直接去my.conf中查看。 my.conf中的配置(放在[mysqld]下的下方加入) [mysqld] log-slow-queries = /usr/local/...
  • 1.在 windows 下可以在mysql/bin目录下可以找到 mysqldumpslow.pl 文件,是一个 perl 格式的文件; 这种格式的文件在windows下是不能...-t 3表示只查询最新的三条数据,后面接慢查询日志所属路径,效果图如下:
  • 关于MySQL 通用查询日志和慢查询日志分析 (1)通用查询日志 一、通用查询日志设置 二、通用查询日志查看 (2)慢查询日志 一、慢查询日志的设置 ...四:慢日志分析工具 mysqldumpslow和mysqls...
  •  在MySQL中,慢查询日志是经常作为我们优化查询的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是开启Profiling功能。该工具在运行的实例上收集有关MongoDB的写操作,游标,数据库命令等,可以在...
  • 2.开启慢查询日志,设置阈值,比如超过5秒钟的就是SQL, 并将它抓取出来。 3.explain+SQL分析 4.show profile 5.运维经理orDBA,进行SQL数据库服务器的参数调优。 ==========总结========== 1.慢查询的开启并...
  • MySQL慢查询日志记录和分析

    千次阅读 2019-01-08 21:05:41
    一、引言 在日常的开发中,有时候会有用户反馈说网站的响应速度...这个时候,我们就需要慢慢分析,我们可以通过开启慢查询日志,来监控生产环境上有没有执行特别的SQL,如果有,我们可以定位到是哪一条SQL,从而...
  • 检查是否开启慢查询日志: show variables like “%slow_query_log%”; 慢查询开启状态 show variables like “%slow_query_log_file%”; 慢查询日志文件 show variables like “%long_query_time%”; 慢查询...
  • 内涵 mysqlsla-2.03.tar.tar 包 mysqlsla之linux安装及使用.docx man_mysqlsla.txt
  • mysql慢查询日志分析

    2018-08-27 12:19:39
    使用mysql慢查询日子对有效率问题sql进行监控,使用工具进行分析 是否开始慢查询日志; show variables like ‘slow_query_log';   查看变量的设置 show variables like "log%"; 将没有设置...
  • 主要介绍MySQL数据库中慢查询日志的使用流程、使用方式、以及日志分析工具mysqldumpslow的相关内容
  • MySQL慢日志查询分析方法与工具

    万次阅读 2018-05-08 14:51:13
    MySQL中的日志包括:错误日志、二进制日志、通用查询日志慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志慢查询日志。1)通用查询日志:记录建立的客户端连接和执行的语句。2)慢查询日志:...
  • MySQL慢查询日志总结

    万次阅读 2018-07-30 14:16:57
    MySQL慢查询日志总结 慢查询日志概念  MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_...
  • 本篇文章主要介绍了详解MySql的慢查询分析及开启慢查询日志,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • sql慢查询日志分析工具?

    千次阅读 2018-12-28 21:48:18
     —filter 对输入的慢查询按指定的字符串进行匹配过滤后,在进行分析  —limit 限制输出结果百分比或数量,默认值是20,即将最的20条语句输出  —host HostName  —user 用户名  —password...
  • 在MySQL中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是...下面这篇文章主要给大家介绍了关于MongoDB慢日志查询(profile)的相关资料,需要的朋友可以参考下。
  • mysql慢查询日志

    2020-06-01 23:30:43
    一、慢查询日志概念 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句。具体怎么玩我们先看下面的演示。 二、慢查询日志配置 默认情况下slow_query_log的值为OFF,表示...
  • Mysql慢查询日志分析工具

    千次阅读 2015-12-17 11:42:00
    Anemometer工具将慢查询日志中语句存储到数据库中,并生成报告。 安装PHP相关服务及perl语言相关模块(http://blog.csdn.net/u010587433/article/details/50339377),并开启http服务。 同时需要安装Percona Toolkit...
  • MySQL慢查询日志分析

    千次阅读 2017-07-28 11:47:28
    一:查询slow log的状态,如示例代码所示,则slow log已经开启。 mysql> show variables like '%slow%'; +---------------------+------------------------------------------+ | Variable_name | Value

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,785
精华内容 53,914
关键字:

慢查询日志分析