慢查询
许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统 存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时 间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的 详细信息)记录下来,Redis 也提供了类似的功能。
Redis 客户端执行一条命令分为如下 4 个部分:

1)发送命令
2)命令排队
3)命令执行
4)返回结果
需要注意,慢查询只统计步骤 3)的时间,所以没有慢查询并不代表客户端没有超时问题。
慢查询配置
对于任何慢查询功能,需要明确两件事:多慢算慢,也就是预设阀值怎么设 置?慢查询记录存放在哪?
Redis 提供了 slowlog-log-slower-than 和 slowlog-max-len 配置来解决这两个问题。slowlog-log-slower-than 就是那个预设阀值,它的单位是微秒(1 秒= 1000 毫 秒= 1 000 000微秒),默认值是 10 000,假如执行了一条“很慢”的命令(例如 keys *),如果它的执行时间超过了 10 000 微秒,也就是 10毫秒,那么它将被记 录在慢查询日志中。

如果 slowlog-log-slower-than=0 表示会记录所有的命令, slowlog-log-slower-than<0 对于任何命令都不会进行记录。
slowlog-max-len用来设置慢查询日志最多存储多少条,并没有说明存放在哪。 实际上 Redis 使用了一个列表来存储慢查询日志,slowlog-max-len 就是列表的最 大长度。当慢查询日志列表被填满后,新的慢查询命令则会继续入队,队列中的 第一条数据机会出列。
虽然慢查询日志是存放在 Redis 内存列表中的,但是 Redis 并没有告诉我们 这里列表是什么,而是通过一组命令来实现对慢查询日志的访问和管理。
总结
slowlog-log-slower-than参数可以设置慢查询临界点,比如设置为0,视为记录所有的命令,10000,单位是微妙,则记录超过10ms的查询命令。
slowlog-max-len参数可以设置慢查询最多存储多条,假如这个参数是128,当存满128条后,后续第129条会继续入队,队列中第一条数据会出列。
慢查询操作命令
获取慢查询日志
slowlog get [n]
参数 n 可以指定查询条数。
可以看到每个慢查询日志有 6 个属性组成,分别是慢查询日志的标识 id、发 生时间戳、命令耗时(单位微秒)、执行命令和参数,客户端 IP、端口和客户端 名称。

获取慢查询日志列表当前的长度 slowlog len 慢查询日志重置 slowlog reset,实际是对列表做清理操作
Pipeline
前面我们已经说过,Redis 客户端执行一条命令分为如下 4 个部分:1)发送 命令 2)命令排队 3)命令执行 4)返回结果。

其中 1+4 称为 Round Trip Time (RTT,往返时间),也就是数据在网络上传输的 时间。
Redis 提供了批量操作命令(例如 mget、mset 等),有效地节约 RTT。但大部分命令是不支持批量操作的,例如要执行 n 次 hgetall 命令,并没有 mhgetall

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



