【原创】Redis高级功能之 慢查询

一、何为慢查询?

慢查询功能可以有效地帮助我们找到 Redis 可能存在的瓶颈

要想理解慢查询的定义是什么,我们可以参见下图。当我们在客户端发送命令给 Redis之后,Redis 需要对这些查询进行排队处理。如果这条查询命令在内部执行的时间超过了已经配置好的时限,那么这条命令(查询)就是一条慢查询。
在这里插入图片描述

注意:我们说的慢查询总是发生在第三阶段,也就是上图的“3.执行命令”这一阶段。并且如果客户端超时不一定是慢查询,但却是客户端超时的一个原因。因为客户端超时不一定都是慢查询所导致的,也可能是因为网络传输和排队时间。

二、如何来配置划分慢查询的时限呢?

要配置慢查询,我们需要配置两个参数。

slowlog-log-slower-than
该选项指定执行时间超过多少微秒,也就是说,如果这条查询(命令)的执行时间超过了这个值,那么这条查询(命令)就是慢查询。

例如,如果这个选项的值为 1000,那么执行时间超过 1000 微秒的命令就会被记录到慢查询日志。如果这个选项的值为 5000,那么执行时间超过 5000 微秒的命令就会被记录到慢查询日志。以此类推。

(1) redis> CONFIG SET slowlog-log-slower-than 0
OK
(2) redis> CONFIG SET slowlog-log-slower-than 10000
OK
上面的(1)代码表示,CONFIG_SET 命令将 slowlog-log-slower-than 选项的值设为 0 微秒,这样 Redis 执行的全部命令都会被记录到慢查询日志

上面的(2)代码表示,CONFIG_SET 命令将 slowlog-log-slower-than 选项的值设为 10000微秒,这样 Redis 执行的时间超过10000微秒的全部命令都会被记录到慢查询日志

然后我们发送几个请求:

redis> SET msg “welcome my city”
OK

redis> SET number 12345
OK

redis> SET database “redis”
OK

通过SLOWLOG GET 命令就可以查看慢日志,如下。

redis> SLOWLOG GET

    1. (integer) 4 # 日志的唯一标识符(uid)
    2. (integer) 1338784447 # 命令执行时的 UNIX 时间戳
    3. (integer) 12 # 命令执行的时长,以微秒计算
      1. “SET” # 命令以及命令参数
      2. “database”
      3. “redis”
    1. (integer) 3
    2. (integer) 1372181139
    3. (integer) 10
      1. “SET”
      2. “number”
      3. “12345”

        slowlog-max-len
        服务器使用先进先出(FIFO)的方式保存多条慢查询日志。当服务器储存的慢查询日志数量等于 slowlog-max-len 选项的值时, 服务器在添加一条新的慢查询日志之前,会先将最旧的一条慢查询日志删除。也就是在服务器的内部,保存的慢查询日志记录是有一定量的,这个量我们可以自己进行设置。

什么意思呢?首先 Redis 会配置一个 slowlog-log-slower-than = 10000(单位:微秒),slowlog-max-len = 100,就是说 10000 微秒(1 秒等于 1,000,000 微秒)后是慢查询,然后就把它放到队列(内存)中,并且从 100 开始递减一直到 1。如下图所示:

在这里插入图片描述

三、慢查询的默认值
我们在使用 Redis 时,可以设置慢查询的默认值。有以下两种方式。

方式一,请见下面代码。修改配置文件

// 不推荐
config get slowlog-max-len = 128 // 设置slowlog-max-len为128,保存数据最多128条
config get slowlog-log-slower-than = 10000// 表示超时到10000微秒会被记录到日志上
上面的配置是修改配置文件后需要重启。

方式二,动态配置。配置方式

// 推荐使用动态配置
config set slowlog-max-len 1000 // 设置slowlog-max-len为1000,保存数据最多1000条,不能太小,也不能太大。
config set slowlog-log-slower-than 10000 // 表示超时到10000微秒会被记录到日志上

四、有关慢查询的常用命令
slowlog get[n] // 获取慢查询队列
slowlog len // 获取慢查询队列的长度
slowlog reset // 清空慢查询队列
对于慢查询,我们在实际使用的时候需要注意以下几点。

1.slowlog-log-slower-than 不要太大,默认是 10ms,实际使用中也只是 1ms 或者 2ms,必须根据 QPS(查询率) 的大小来设定;

2.slowlog-max-len 不要太小,通常是 1000。默认是 128。因为存在内存中,如果设置过小,会导致之前的慢查询丢失,故建议改成 1000。

3.定期对慢查询进行持久化。

猜你喜欢

转载自blog.csdn.net/qq_42294367/article/details/83109427