慢查询日志

原创 2016年05月31日 17:36:42

redis的慢查询日志:用于记录执行时间超过给定时长的命令请求,用户可以通过慢查询日志来监视和优化查询速度。

两个服务器配置选项:

  1. slowlog-log-slower-than 选项:指定执行时间超过多少微妙的命令请求会被记录到日志上。
  2. slowlog-max-len 选项:指定服务器最多保存多少条慢查询日志。
redis> CONFIG SET slowlog-log-slower-than 10
OK

redis> CONFIG SET slowlog-max-len 5
OK

获取慢查询日志:

redis> SLOWLOG GET

1. 慢查询记录的保存

服务器状态redisServer结构中包含慢查询日志功能的相关属性:

struct redisServer{
    //...

    //下一条慢查询日志的ID
    long long slowlog_entry_id;

    //保存了所有慢查询日志的链表
    list *slowlog;

    //服务器配置项slowlog-log-slower-than
    long long slowlog_log_slower_than;
    //服务器配置项 slowlog-max-len
    long long slowlog-max-len;

    //...
};

这里写图片描述

slowlog.h/slowlogEntry结构:

/* This structure defines an entry inside the slow log list */
/*
 * 慢查询日志
 */
typedef struct slowlogEntry {

    // 命令与命令参数
    robj **argv;

    // 命令与命令参数的数量
    int argc;

    // 唯一标识符
    long long id;       /* Unique entry identifier. */

    // 执行命令消耗的时间,以微秒为单位
    // 注释里说的 nanoseconds 是错误的
    long long duration; /* Time spent by the query, in nanoseconds. */

    // 命令执行时的时间,格式为 UNIX 时间戳
    time_t time;        /* Unix time at which the query was executed. */

} slowlogEntry;

这里写图片描述

慢查询方法:

/* Exported API */
void slowlogInit(void);
void slowlogPushEntryIfNeeded(robj **argv, int argc, long long duration);

/* Exported commands */
void slowlogCommand(redisClient *c);

2. 慢查询日志的阅览和删除

SLOWLOG GET 命令:查看慢查询日志
SLOWLOG LEN 命令:查看日志数量
SLOWLOG RESET 命令:清除所有慢查询日志

3. 添加新日志

slowlog.h/slowlogPushEntryIfNeeded函数:

/* Push a new entry into the slow log.
 *
 * 如果参数 duration 超过服务器设置的上限时间,
 * 那么将一个新条目以 FIFO 顺序推入到慢查询日志中。
 *
 * This function will make sure to trim the slow log accordingly to the
 * configured max length. 
 *
 * 根据服务器设置的最大日志长度,可能会对日志进行截断(trim)
 */
void slowlogPushEntryIfNeeded(robj **argv, int argc, long long duration/*服务器执行命令所耗费的时长*/) {

    // 慢查询功能未开启,直接返回
    if (server.slowlog_log_slower_than < 0) return; /* Slowlog disabled */

    // 如果执行时间超过服务器设置的上限,那么将命令添加到慢查询日志
    if (duration >= server.slowlog_log_slower_than)
        // 新日志添加到链表表头
        listAddNodeHead(server.slowlog,slowlogCreateEntry(argv,argc,duration));

    /* Remove old entries if needed. */
    // 如果日志数量过多,那么进行删除
    while (listLength(server.slowlog) > server.slowlog_max_len)
        listDelNode(server.slowlog,listLast(server.slowlog));
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

关于MySQL 通用查询日志和慢查询日志分析

本文中详细介绍了MySQL中的通用查询日志和慢查询日志
  • timchen525
  • timchen525
  • 2017年07月17日 21:17
  • 5750

慢查询日志分析

慢查询日志 打开慢查询日志 慢查询日志,顾名思义就是记录执行比较慢查询的日志。 查看是否开启慢查询日志: show variables like '%slow%'; ...
  • wulantian
  • wulantian
  • 2014年10月20日 10:03
  • 16032

学会读懂 MySql 的慢查询日志

在前边的博客《何时、如何开启 MySql 日志?》中,我们了解到了如何启用 MySql 的慢查询日志。今天我们来看一下如何去读懂这些慢查询日志。在跟踪慢查询日志之前,首先你得保证最少发生过一次慢查询。...
  • defonds
  • defonds
  • 2015年07月14日 15:21
  • 2603

mongodb Profiling 通过慢查询日志分析查询慢的原因 相应优化

0  摘要   在MySQL中,慢查询日志是经常作为我们优化查询的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是开启Profiling功能。该工具在运行的实例上收集有关Mon...
  • yisun123456
  • yisun123456
  • 2017年10月18日 16:31
  • 320

日志-php-fpm慢日志查询

项目用php开发,在平常的过程中,应该时常监测下php脚本的运行状态 如何来查看检测比较慢的php脚本呢? 查看php-fpm慢日志。 1.先查找到配置文件存放地址 find / -name ph...
  • ty_hf
  • ty_hf
  • 2017年02月17日 20:49
  • 5492

Mysql慢查询日志分析工具

Anemometer工具将慢查询日志中语句存储到数据库中,并生成报告。 安装PHP相关服务及perl语言相关模块(http://blog.csdn.net/u010587433/article/det...
  • u010587433
  • u010587433
  • 2015年12月17日 11:42
  • 788

mysql 优化之开启慢查询并分析原因

开启mysql慢查询日志 查看配置:
  • haiqiao_2010
  • haiqiao_2010
  • 2014年05月06日 16:49
  • 18157

MySQL5.6 如何优化慢查询的SQL语句 -- 慢日志介绍

介绍下如何开启MySQL slow query log
  • cloud_ll
  • cloud_ll
  • 2014年10月12日 10:26
  • 3222

MySQL优化:启用慢查询日志记录

在前面的文章中,我们介绍了如何使用EXPLAIN来获取SELECT语句的执行计划信息,从而实现MySQL语句查询性能的优化。此外,我们还可以让MySQL记录下那些执行时间特别长的SQL语句,以便于我们...
  • wangshfa
  • wangshfa
  • 2015年04月13日 13:11
  • 647

MYSQL 5.7.9 开启慢查询日志

mysql 用户权限问题...
  • ZengMuAnSha
  • ZengMuAnSha
  • 2016年03月17日 15:27
  • 2844
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:慢查询日志
举报原因:
原因补充:

(最多只允许输入30个字)