• MySQL之慢查询日志和通用查询


     MySQL中的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等。这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志。

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

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

    慢查询日志可以帮助我们知道哪些SQL语句执行效率低下,所以使用慢查询日志在我们日常开发中是十分有用的.

      一. 慢查询日志开启

        

    # 检查是否开启
    show variables like '%slow%';

      参数说明:  

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

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

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

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

      如果是关闭的情况下,slow_query_log会是OFF,这个时候进行开启

    # 如果没有开启,也可以在运行时开启这个参数。说明是动态参数
    set global slow_query_log=ON;

      永久开启,修改配置文件:

                             Windows:  修改配置文件mysqlinmysql.ini 添加到[mysqld]中

    #慢查询日志
    slow_query_log = 1
    long_query_time = 2 
    slow_query_log_file =  F:MySQLlogmysqlslowquery.log

           Linux下的设置: 同上,只不过,修改的配置文件是my.cnf文件

             有时候会找不到该文件: 使用命令进行查找

    mysql --help|grep 'my.cnf'
    
    
    ps aux|grep mysql|grep 'my.cnf'
    
    
    locate my.cnf

      设置输出日志:

    #慢查询日志输出到表中(即mysql.slow_log)
    
    set globallog_output=’TABLE’;
    
    #慢查询日志仅输出到文本中(即:slow_query_log_file指定的文件)
    
    setglobal log_output=’FILE’;
    
    #慢查询日志同时输出到文本和表中
    
    setglobal log_output=’FILE,TABLE’;  

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

    在MySQL中有一个变量专门记录当前慢查询语句的个数:

    输入命令:show global status like ‘%slow%’;

      二.设置慢查询时间

    # 设置慢查询记录查询耗时多长的SQL,这里演示用100毫秒
    set long_query_time = 0.1;

      

      这个时候已经设置完成,可以进行测试: 

    # 用SQL试一下。这里休眠500毫秒
    select sleep(0.5)
    

      

      最终会在你的slow_query_log_file对应的文件中查看记录下的慢查询SQL

      三. 通用查询日志

      在学习通用日志查询时,需要知道两个数据库中的常用命令:

      1) show variables like ‘%general%’;

        可以查看,当前的通用日志查询是否开启,如果general_log的值为ON则为开启,为OFF则为关闭(默认情况下是关闭的)。

      2) show variables like ‘%log_output%’;

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

        问题:如何开启MySQL通用查询日志,以及如何设置要输出的通用日志输出格式呢?

    开启通用日志查询: set global general_log=on;
    
    关闭通用日志查询: set global general_log=off;
    
    设置通用日志输出为表方式: set global log_output=’TABLE’;
    
    设置通用日志输出为文件方式: set global log_output=’FILE’;
    
    设置通用日志输出为表和文件方式:set global log_output=’FILE,TABLE’;

      (注意:上述命令只对当前生效,当MySQL重启失效,如果要永久生效,需要配置 my.cnf)

      my.cnf文件的配置如下:

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

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

  • 相关阅读:
    【20170923】2017暑假北京学习 day 3
    Leetcode 39
    事无巨细 | 访问一个网站的过程
    Leetcode 77
    排序 | 快速排序
    排序 | 堆排序
    Leetcode 60
    Leetcode 51
    海量数据处理的解法
    Leetcode 99
  • 原文地址:https://www.cnblogs.com/xingxia/p/mysql_slow_query_log.html
Copyright © 2020-2023  润新知