当前位置:网站首页>Redis入门完整教程:慢查询分析
Redis入门完整教程:慢查询分析
2022-07-04 22:29:00 【谷哥学术】
许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定
位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命
令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时
间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能。
如图3-1所示,Redis客户端执行一条命令分为如下4个部分:
1)发送命令
2)命令排队
3)命令执行
4)返回结果
需要注意,慢查询只统计步骤3)的时间,所以没有慢查询并不代表客
户端没有超时问题。
3.1.1 慢查询的两个配置参数
对于慢查询功能,需要明确两件事:
·预设阀值怎么设置?
·慢查询记录存放在哪?
Redis提供了slowlog-log-slower-than和slowlog-max-len配置来解决这两个
问题。从字面意思就可以看出,slowlog-log-slower-than就是那个预设阀值,
它的单位是微秒(1秒=1000毫秒=1000000微秒),默认值是10000,假如执
行了一条“很慢”的命令(例如keys*),如果它的执行时间超过了10000微
秒,那么它将被记录在慢查询日志中。
运维提示
如果slowlog-log-slower-than=0会记录所有的命令,slowlog-log-slower-
than<0对于任何命令都不会进行记录。
从字面意思看,slowlog-max-len只是说明了慢查询日志最多存储多少
条,并没有说明存放在哪里?实际上Redis使用了一个列表来存储慢查询日
志,slowlog-max-len就是列表的最大长度。一个新的命令满足慢查询条件时
被插入到这个列表中,当慢查询日志列表已处于其最大长度时,最早插入的
一个命令将从列表中移出,例如slowlog-max-len设置为5,当有第6条慢查询
插入的话,那么队头的第一条数据就出列,第6条慢查询就会入列。
在Redis中有两种修改配置的方法,一种是修改配置文件,另一种是使
用config set命令动态修改。例如下面使用config set命令将slowlog-log-slower-
than设置为20000微秒,slowlog-max-len设置为1000:
config set slowlog-log-slower-than 20000
config set slowlog-max-len 1000
config rewrite
如果要Redis将配置持久化到本地配置文件,需要执行config rewrite命
令,如图3-2所示。
虽然慢查询日志是存放在Redis内存列表中的,但是Redis并没有暴露这
个列表的键,而是通过一组命令来实现对慢查询日志的访问和管理。下面介
绍这几个命令。
(1)获取慢查询日志
slowlog get [n]
下面操作返回当前Redis的慢查询,参数n可以指定条数:
127.0.0.1:6379> slowlog get
1) 1) (integer) 666
2) (integer) 1456786500
3) (integer) 11615
4) 1) "BGREWRITEAOF"
2) 1) (integer) 665
2) (integer) 1456718400
3) (integer) 12006
4) 1) "SETEX"
2) "video_info_200"
3) "300"
4) "2"
...
可以看到每个慢查询日志有4个属性组成,分别是慢查询日志的标识
id、发生时间戳、命令耗时、执行命令和参数,慢查询列表如图3-3所示。
(2)获取慢查询日志列表当前的长度
slowlog len
例如,当前Redis中有45条慢查询:
127.0.0.1:6379> slowlog len
(integer) 45
(3)慢查询日志重置
slowlog reset
实际是对列表做清理操作,例如:
127.0.0.1:6379> slowlog len
(integer) 45
127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 0
3.1.2 最佳实践
慢查询功能可以有效地帮助我们找到Redis可能存在的瓶颈,但在实际
使用过程中要注意以下几点:
·slowlog-max-len配置建议:线上建议调大慢查询列表,记录慢查询时
Redis会对长命令做截断操作,并不会占用大量内存。增大慢查询列表可以
减缓慢查询被剔除的可能,例如线上可设置为1000以上。
·slowlog-log-slower-than配置建议:默认值超过10毫秒判定为慢查询,
需要根据Redis并发量调整该值。由于Redis采用单线程响应命令,对于高流
量的场景,如果命令执行时间在1毫秒以上,那么Redis最多可支撑OPS不到
1000。因此对于高OPS场景的Redis建议设置为1毫秒。
·慢查询只记录命令执行时间,并不包括命令排队和网络传输时间。因
此客户端执行命令的时间会大于命令实际执行时间。因为命令执行排队机
制,慢查询会导致其他命令级联阻塞,因此当客户端出现请求超时,需要检
查该时间点是否有对应的慢查询,从而分析出是否为慢查询导致的命令级联
阻塞。
·由于慢查询日志是一个先进先出的队列,也就是说如果慢查询比较多
的情况下,可能会丢失部分慢查询命令,为了防止这种情况发生,可以定期
执行slow get命令将慢查询日志持久化到其他存储中(例如MySQL),然后
可以制作可视化界面进行查询,第13章介绍的Redis私有云CacheCloud提供
了这样的功能,好的工具可以让问题排查事半功倍。
边栏推荐
- 常用技术指标之一文读懂BOLL布林线指标
- 关于栈区、堆区、全局区、文字常量区、程序代码区
- Challenges faced by virtual human industry
- [roommate learned to use Bi report data processing in the time of King glory in one game]
- 都说软件测试很简单有手就行,但为何仍有这么多劝退的?
- [OpenGL] note 29 anti aliasing (MSAA)
- 攻防世界 MISC 进阶区 can_has_stdio?
- 测试必会:BUG的分类及推进解决
- 串口数据帧
- Attack and defense world misc advanced grace-50
猜你喜欢
业务太忙,真的是没时间搞自动化理由吗?
The overview and definition of clusters can be seen at a glance
[OpenGL] note 29 anti aliasing (MSAA)
蓝队攻防演练中的三段作战
Logo special training camp section III initial creative techniques
Hit the core in the advanced area of misc in the attack and defense world
Introducing QA into the software development lifecycle is the best practice that engineers should follow
Sobel filter
Redis入门完整教程:发布订阅
新版判断PC和手机端代码,手机端跳转手机端,PC跳转PC端最新有效代码
随机推荐
MySQL Architecture - logical architecture
LOGO特训营 第五节 字体结构与设计常用技法
Detailed explanation of flask context
NFT Insider #64:电商巨头eBay提交NFT相关商标申请,毕马威将在Web3和元宇宙中投入3000万美元
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
Unity Xiuxian mobile game | Lua dynamic sliding function (specific implementation of three source codes)
SQL中MAX与GREATEST的区别
More than 30 institutions jointly launched the digital collection industry initiative. How will it move forward in the future?
Attack and defense world misc advanced grace-50
环境加密技术解析
Wake up day, how do I step by step towards the road of software testing
LOGO特训营 第四节 字体设计的重要性
攻防世界 MISC 進階區 Erik-Baleog-and-Olaf
堆排序代码详解
Analog rocker controlled steering gear
Taobao commodity review API interface (item_review get Taobao commodity review API interface), tmall commodity review API interface
Introduction and application of bigfilter global transaction anti duplication component
页面关闭前,如何发送一个可靠请求
sobel过滤器
9 - 类