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 也可以,需要定时清除该文件,避免单文件过大。

  • 相关阅读:
    Firemonkey 控件设定字型属性及颜色
    ListView 使用 LiveBindings 显示超过 200 条记录
    Firemonkey ListView 获取项目右方「>」(Accessory) 事件
    XE7 Update 1 选 iOS 8.1 SDK 发布 iPhone 3GS 实机测试
    Firemonkey Bitmap 设定像素颜色 Pixel
    Firemonkey 移动平台 Form 显示使用 ShowModal 范例
    XE7 提交 App(iOS 8)提示「does not contain the correct beta entitlement」问题修复
    XE7 Android 中使用 MessageDlg 范例
    导出 XE6 预设 Android Style (*.style) 档案
    修正 Memo 設定為 ReadOnly 後, 無法有複製的功能
  • 原文地址:https://www.cnblogs.com/andy6/p/9561662.html
Copyright © 2011-2022 走看看