美文网首页
如何使用慢查询

如何使用慢查询

作者: AD刘涛 | 来源:发表于2020-03-08 23:40 被阅读0次

    慢查询的使用

    慢速查询日志可用于查找执行时间较长的查询,这对我们在做sql性能优化有很大帮助。然而,检查一个文件较大的查询日志可能是一项耗时的任务。为了简化这一过程,您可以使用mysqldumpslow命令来处理一个慢速查询日志文件并总结其内容。

    定位慢查询

    当我们在写web api接口时常常会碰到某个接口需要很久才能返回结果,这时我们就应该去检查是不是慢查询导致的。定位慢 SQL 有如下两种解决方案:

    • 查看慢查询日志
    • show processlist 查看正在执行的慢查询

    查看慢查询日志

    检查慢查询日志是否开启

    慢查询可以帮我们找到执行慢的 SQL,在使用前,我们需要先看下慢查询是否已经开启,使用下面这条命令即可:

    mysql> show variables like '%slow_query_log';
    +----------------+-------+
    | Variable_name  | Value |
    +----------------+-------+
    | slow_query_log | OFF   |
    +----------------+-------+
    1 row in set (0.00 sec)
    

    开启慢查询日志

    我们能看到slow_query_log=OFF,也就是说慢查询日志此时是关上的。我们可以把慢查询日志打开,注意设置变量值的时候需要使用 global,否则会报错:

    mysql> set global slow_query_log = on;
    
    Query OK, 0 rows affected (0.00 sec)
    

    查看慢查询阀值

    接下来我们来看下慢查询的时间阈值设置(默认值是10秒),使用如下命令:

    mysql> show variables like '%long_query_time%';
    +-----------------+-----------+
    | Variable_name   | Value     |
    +-----------------+-----------+
    | long_query_time | 10.000000 |
    +-----------------+-----------+
    1 row in set (0.00 sec)
    

    设置慢查询阀值

    在这里我们一般建议线上业务把 long_query_time 设置为 1 秒,如果你当前业务要求比较高的QPS,可设置慢查询为 0.1 秒。

    mysql> set global long_query_time = 1;
    
    Query OK, 0 rows affected (0.00 sec)
    

    确定慢查询日志路径

    mysql> show global variables like "datadir";
    
    +---------------+------------------------+
    | Variable_name | Value                  |
    +---------------+------------------------+
    | datadir       | /data/mysql/data/3306/ |
    +---------------+------------------------+
    
    1 row in set (0.00 sec)
    

    确定慢查询日志的文件名

    mysql> show global variables like "slow_query_log_file";
    
    +---------------------+----------------+
    | Variable_name       | Value          |
    +---------------------+----------------+
    | slow_query_log_file | mysql-slow.log |
    +---------------------+----------------+
    
    1 row in set (0.00 sec)
    

    根据上面的查询结果,可以直接查看 /data/mysql/data/3306/mysql-slow.log 文件获取已经执行完的慢查询。

    日志文件参数介绍

    参数名 含义
    Query_time 查询时间
    Lock_time 等待表锁的时间
    Rows_sent 语句返回的行数
    Rows_examined 语句执行期间从存储引擎读取的行数

    使用 show processlist

    有时慢查询正在执行,已经导致数据库负载偏高了,而由于慢查询还没执行完,因此慢查询日志还看不到任何语句。此时可以使用 show processlist 命令判断正在执行的慢查询。show processlist 显示哪些线程正在运行。

    mysql> show processlist\G`
    *************************** 1. row ***************************
         Id: 4
       User: root
       Host: localhost
         db: NULL
    Command: Query
       Time: 0
      State: starting
       Info: show processlist
    1 row in set (0.00 sec)
    

    参数介绍

    参数名 含义
    db 数据库名
    command 连接状态,一般是休眠(sleep),查询(query),连接(connect)
    time 连接持续时间,单位是秒
    state 显示当前sql语句的状态
    info 显示这个sql语句

    我们这里可以通过它的执行时间(Time)来判断是否是慢 SQL。

    相关文章

      网友评论

          本文标题:如何使用慢查询

          本文链接:https://www.haomeiwen.com/subject/qsusdhtx.html