• MySQL慢查询详解


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

     
    查看/设置“慢查询”的时间定义
     
    mysql> show variables like "long%";
    +-----------------+----------+
    | Variable_name   | Value    |
    +-----------------+----------+
    | long_query_time | 0.000100 |
    +-----------------+----------+
    1 row in set (0.00 sec)
    如上述语句输出,“慢查询”的时间定义为0.0001秒(方便测试,一般设置为1-10秒)。使用下面语句定义“慢查询”时间
     
    mysql> set long_query_time=0.0001;
    Query OK, 0 rows affected (0.00 sec)
    开启“慢查询”记录功能
     
    mysql> show variables like "slow%";
    +---------------------+------------------------------------+
    | Variable_name       | Value                              |
    +---------------------+------------------------------------+
    | slow_launch_time    | 2                                  |
    | slow_query_log      | OFF                                |
    | slow_query_log_file | /opt/mysql/data/localhost-slow.log |
    +---------------------+------------------------------------+
    3 rows in set (0.00 sec)
    上述语句查看“慢查询”的配置信息,你可以自定义日志文件的存放,但必须将 slow_query_log 全局变量设置为“ON”状态,执行以下语句:
     
    mysql> set global slow_query_log=ON;
    Query OK, 0 rows affected (0.01 sec)
    结果:
    mysql> show variables like "slow%";
    +---------------------+------------------------------------+
    | Variable_name       | Value                              |
    +---------------------+------------------------------------+
    | slow_launch_time    | 2                                  |
    | slow_query_log      | ON                                 |
    | slow_query_log_file | /opt/mysql/data/localhost-slow.log |
    +---------------------+------------------------------------+
    3 rows in set (0.00 sec)
     
     
    查看慢查询的记录数
    mysql> show global status like '%slow%';  
     
    查看log_queries_not_using_indexes状态
    mysql> show variables like 'log_queries_not_using_indexes';
     
    进入 mysql/bin 目录,输入 mysqldumpslow ?help 或 --help 可以看到这个工具的参数
    mysqldumpslow -s c -t 20 host-slow.log
    mysqldumpslow -s r -t 20 host-slow.log 
    上述命令可以看出访问次数最多的 20 个 sql 语句和返回记录集最多的 20 个 sql 
    mysqldumpslow -t 10 -s t -g "left join" host-slow.log
    这个是按照时间返回前 10 条里面含有左连接的 sql 语句。
    mysqldumpslow -s c -t 10 /database/mysql/slow-log
    这会输出记录次数最多的10条SQL语句,其中:
    -s order,是表示按照何种方式排序,order值有:c、t、l、r 分别是按照记录次数、时间、查询时间、返回的记录数来排序,ac、at、al、ar,表示相应的倒序;
    -t num,即为返回前面多少条的数据;
    -g pattern,pattern可以写一个正则匹配模式,大小写不敏感的;
    使用mysqldumpslow命令可以非常明确的得到各种我们需要的查询语句,对MySQL查询语句的监控、分析、优化是MySQL优化的第一步,也是非常重要的一步。
  • 相关阅读:
    DBMS_SCHEDULER 的使用
    Android 鲜为人知的 8 个小秘密
    你正在使用的移动电话已经 40 岁
    HDU1056:HangOver
    Firefox OS 源码泄露!!!
    上网本 硬盘安装linux 最揪心的回忆
    103 Stacking Boxes
    ip2long之后有什么好处?
    mysql怎么创建,删除,查看索引?
    用mysql查询某字段是否有索引
  • 原文地址:https://www.cnblogs.com/fjping0606/p/4417672.html
Copyright © 2020-2023  润新知