慢查询日志

原创 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慢查询日志

查看配置: //查看慢查询时间 show variables like "long_query_time";默认10s //查看慢查询配置情况 show status like "%slow_q...

学会读懂 MySql 的慢查询日志

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

mysql 慢查询日志

慢查询日志 定位执行较慢的查询语句方案,从而决定优化 参数 说明 slow_query_log 开启慢查询日志 slow_query_log_file 日志位置 参数 ...

MYSQL 慢查询日志 2

3.2.2   慢查询日志(2) 如果我们想得到锁定时间最长的10条SQL语句,可以运行: [root@nh119-141 data]# /usr/local/mysql/bin /mysqldu...
  • ty_soft
  • ty_soft
  • 2011年11月18日 14:11
  • 252

MySQL 慢查询日志

转自:http://www.cnblogs.com/zmduan/archive/2012/12/05/2803392.html 随着数据量的不断增长,性能尤为重要,或许经过优化及好的解决方案,...
  • a_haoGG
  • a_haoGG
  • 2017年06月01日 13:56
  • 159

MySql慢查询日志——开启/查看/删除

1,开启慢查询日志修改mysql.ini文件,加入如下配置:[mysqld] log-slow-queries=H:\mysql_log\slow_query.log long-query-time=...

Redis 慢查询日志

慢查询日志是 Redis 提供的一个用于观察系统性能的功能。 每条慢查询日志都以一个 slowlog.h/slowlogEntry 结构定义: typedef struct slowlogEnt...

MySQL 慢查询日志分析及可视化结果

1. pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 2. 报告最近半...

mysql慢查询日志使用总结

mysql慢查询日志使用总结 首先查看log_output参数,确认日志信息输出到操作系统文件还是数据库的表中: mysql> show variables like 'log_output'...

Redis高级功能 - 慢查询日志

Redis 提供了5种数据结构,但除此之外, Redis 还提供了注入慢查询分析, Redis Shell 、 Pipeline 、事务、与 Lua 脚本、 Bitmaps 、 HyperLogLog...
  • luyaran
  • luyaran
  • 2017年06月27日 16:27
  • 774
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:慢查询日志
举报原因:
原因补充:

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