zoukankan      html  css  js  c++  java
  • mysql之 slow log 慢查询日志

    一、 相关参数:


    • slow_query_log
     ◦ 是否开启慢查询日志

    • slow_query_log_file
     ◦ 慢查询日志文件名, 在 my.cnf 我们已经定义为slow.log,默认是 机器名 -slow.log

    • long_query_time
     ◦ 制定慢查询阈值, 单位是秒,且当版本 >=5.5.X ,支持毫秒。例如 0.5 即为 500ms
     ◦ 大于 该值,不包括值本身。例如该值为2,则执行时间正好 等于 2的SQL语句 不会记录

    • log_queries_not_using_indexes
     ◦ 将没有使索引的SQL记录到慢查询日志
        ◾ 如果一开始因为数据少,查表快,耗时的SQL语句没被记录,当数据量大时,该SQL可能会执行很长时间
        ◾ 需要测试阶段就要发现问题,减小上线后出现问题的桜率

    • log_throttle_queries_not_using_indexes
     ◦ 限制每分钟内,在慢查询日志中,去记录没有使用索引的SQL语句的次数;版本需要 >=5.6.X
        ◾ 因为没有使用索引的SQL可能会短时间重复执行,为了避免日志快速增大,限制每分钟的记录次数

    • min_examined_row_limit
     ◦ 扫描记录少于改值的SQL不记录到慢查询日志
        ◾ 结合去记录没有使用索引的SQL语句的例子,有可能存在某一个表,数据量维持在几行左右,且没有建立索引。这种表即使不建立索引,查询也很快,扫描记录很小,如果确定有这种表,则可以通过此参数设置,将这个SQL不记录到慢查询日志。

    • log_slow_admin_statements
     ◦ 记录超时的管理操作SQL到慢查询日志,比如ALTER/ANALYZE TABLE

    • log_output
     ◦ 慢查询日志的栺式,[FILE | TABLE | NONE],默认是FILE;版本 >=5.5
     ◦ 如果设置为TABLE,则记录的到 mysql.slow_log

    • log_slow_slave_statements
     ◦ 在从服务器上开启慢查询日志

    • log_timestamps     5.7
     ◦ 写入时区信息。可根据需求记录UTC时间或者服务器本地系统时间

    二、mysqldumpslow工具使用
      
      如果在线上操作,不需要 mysqldumpslow 去扫整个 slow.log , 可以去 tail -n 10000 slow.log > last_10000_slow.log (10000 这个数字根据实际情况进行调整 ),然后进行 mysqldumpslow last_10000_slow.log


    三、慢查询日志存入表

    -- 在my.cnf 中增加 log_output = TABLE,打开slow_query_log选项,然后重启数据库实例
    --
    mysql> show variables like "log_output%";
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | log_output | TABLE |
    +---------------+-------+
    1 row in set (0.00 sec)
    mysql> show variables like "slow_query_log";
    +----------------+-------+
    | Variable_name | Value |
    +----------------+-------+
    | slow_query_log | ON |
    +----------------+-------+
    1 row in set (0.00 sec)
    mysql> select * from mysql.slow_log;
    +----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
    | start_time | user_host | query_time | lock_time | rows_sent | rows_examined | db | last_insert_id | insert_id | server_id | sql_text | thread_id |
    +----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
    | 2015-11-20 19:50:28.574677 | root[root] @ localhost [] | 00:00:04.000306 | 00:00:00.000000 | 1 | 0 | | 0 | 0 | 11 | select sleep(4) | 3 |
    +----------------------------+---------------------------+-----------------+-----------------+-----------+---------------+----+----------------+-----------+-----------+-----------------+-----------+
    1 row in set (0.00 sec)
    mysql> show create table mysql.slow_log;
    --
    -- 表结构输出省略
    -- 关键一句如下:
    --
    ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' -- ENGINE=CSV 这里使用的是CSV的引擎,性能较差
    -- 建议将slow_log表的存储引擎改成MyISAM
    mysql> alter table mysql.slow_log engine = myisam;
    ERROR 1580 (HY000): You cannot 'ALTER' a log table if logging is enabled '-- 提示我正在记录日志中,不能转换
    mysql> set global slow_query_log = 0; -- 先停止记录日志
    Query OK, 0 rows affected (0.01 sec)
    mysql> alter table mysql.slow_log engine = myisam; -- 然后转换表的引擎
    Query OK, 2 rows affected (5.05 sec)
    Records: 2 Duplicates: 0 Warnings: 0
    mysql> set global slow_query_log = 1; -- 再开启记录日志
    Query OK, 0 rows affected (0.00 sec)
    mysql> show create table mysql.slow_log;
    --
    -- 表结构输出省略
    -- 关键一句如下:
    --
    ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log' -- ENGINE 变成了MyISAM
    使用 TABLE 的优势在于方便查询,但是记住当在备份的时候,不要备份慢查询日志的表,避免备份过大。
    使用 FILE 也可以,需要定时清除该文件,避免单文件过大。

  • 相关阅读:
    yum只下载不安装
    知乎的 Flink 数据集成平台建设实践
    饿了么EMonitor演进史
    手机淘宝轻店业务 Serverless 研发模式升级实践
    独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless
    一文详解物化视图改写
    业务团队如何统一架构设计风格?
    Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩
    开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?
    Service Mesh 从“趋势”走向“无聊”
  • 原文地址:https://www.cnblogs.com/andy6/p/9561662.html
Copyright © 2011-2022 走看看