很多存储系统(Mysql)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作,慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阈值时,就把这条命令的相关信息记录下来,Redis同样提供类似的功能。
image.png
Redis客户端执行一条命令分为4个部分,如下:
- 发送命令
- 命令排队
- 命令执行
- 返回结果
慢查询只统计命令执行的时间,因此,没有慢查询并不代表客户端没有超时时间。Redis提供了slowlog-log-slower-than(毫秒)和slowlog-max-len,前者表示预设的阈值,当一条命令的执行时间超过阈值时,它将被记录到慢查询日志中去。而slowlog-max-len只说明了慢查询日志最多存储多少条,并没有说明日志存放在哪,实际上Redis使用了一个列表来存储慢查询日志,slowlog-max-len表示列表的长度,当列表长度超过该值就把列表第一天数据出列。
获取慢查询日志
slowlog get [n] // n 指定条数
slowlog len // 日志长度
slowlog reset // 重置, 实际是清理列表
image.png
小结
- 慢查询只记录命令执行的时间,并不包括命令排队和网络传输时间,客户端执行命令的时间会多于命令实际执行时间。
- 慢查询日志实质上是一个先进先出的队列,如果慢查询比较多,可以定期执行slow get命令将慢查询日志持久化到其他存储中去。
网友评论