【赵渝强老师】Redis的慢查询日志

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis慢查询日志用于记录执行时间超过预设阈值的命令,帮助开发和运维人员定位性能问题。每条慢查询日志包含标识ID、发生时间戳、命令耗时及详细信息。配置参数包括`slowlog-max-len`(默认128)和`slowlog-log-slower-than`(默认10000微秒)。实战中可通过`slowlog get`获取日志、`slowlog len`查看长度、`slowlog reset`重置日志。建议线上环境将`slowlog-max-len`设为1000以上,并根据并发量调整`slowlog-log-slower-than`。需要注意的是,慢查询只记录命令执行时间。

b183.png

Redis慢查询日志帮助开发和运维人员定位系统存在的慢操作。慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(慢查询ID,发生时间戳,耗时,命令的详细信息)记录下来。Redis客户端的一条命令可以分为四个部分执行,如下图所示。

image.png


视频讲解如下:



一条Redis的慢查询日志由以下四个属性组成:标识ID,发生时间戳,命令耗时,执行命令和参数。

提示:需要注意的是,慢查询日志只是统计执行命令的时间,所以慢查询并不代表客户端没有超时问题。


一、慢查询的配置参数


Redis提供的慢查询配置参数如下:

127.0.0.1:6379> CONFIG GET slowlog*
1) "slowlog-max-len"
2) "128"
3) "slowlog-log-slower-than"
4) "10000"


其中:


  • slowlog-max-len


Redis使用一个列表来存储慢查询日志,showlog-max-len就是列表的最大长度(默认值是128)。当慢查询日志已经到达列表的最大长度时,又有慢查询日志要进入列表,则最早插入列表的日志将会被移出列表,新日志被插入列表的末尾。


  • slowlog-log-slower-than


Redis预设的慢查询时间阀值(默认值是10000微秒)。如果一条命令的执行时间超过10000微妙,那么它将被记录在慢查询日志中。如果slowlog-log-slower-than的值是0,则会记录所有命令。如果slowlog-log-slower-than的值小于0,则任何命令都不会记录日志。例如:


127.0.0.1:6379> config set slowlog-log-slower-than 0
OK



二、【实战】管理慢查询日志


下面通过具体的操作步骤来演示如何管理和使用Redis提供的慢查询日志。视频讲解如下:


(1)向Redis中插入一条数据

127.0.0.1:6379> set location Beijing
127.0.0.1:6379> hmset user001 name Tom age 24 gender Male


(2)获取慢查询日志。

slowlog get [n]
# 其中N代表获取的日志条数。如果不提供N的值,将获取所有的慢查询日志记录。下面的语句将获取最近的3条慢查询日志。
127.0.0.1:6379> slowlog get 3
1) 1) (integer) 9       慢查询标识ID
2) (integer) 1650100709     慢查询发生时间戳
3) (integer) 7          命令耗时
4) 1) "hmset"         执行命令和参数
2) "user001"
3) "name"
4) "Tom"
5) "age"
6) "24"
7) "gender"
8) "Male"
5) "127.0.0.1:48218"
6) ""
2) 1) (integer) 8       慢查询标识ID
2) (integer) 1650100706     慢查询发生时间戳
3) (integer) 6          命令耗时
4) 1) "set"           执行命令和参数
2) "location"
3) "Beijing"
5) "127.0.0.1:48218"
6) ""
3) 1) (integer) 7       慢查询标识ID
2) (integer) 1650100698     慢查询发生时间戳
3) (integer) 11         命令耗时
4) 1) "slowlog"         执行命令和参数
2) "get"
3) "3"
5) "127.0.0.1:48218"
6) ""


(3)获取慢查询日志列表的当前长度:slowlog len

127.0.0.1:6379> slowlog len
(integer) 11
# 提示:当前Redis慢查询日志队列中存在11条记录。


(4)重置慢查询日志:slowlog reset

127.0.0.1:6379> slowlog reset
OK
127.0.0.1:6379> slowlog len
(integer) 1
# 提示:该操作实际是对列表做清理操作



三、慢查询日志最佳实践


Redis提供的慢查询日志对应诊断Redis数据库实例在运行过程中发生的性能问题是非常有帮助的。因此在实际环境中使用Redis的慢查询日志时有以下几点建议。


  • slowlog-max-len的设置建议


线上环境建议调大慢查询日志的列表,记录慢查询日志时Redis会对长命令做截断操作,并不会占用大量内存。增大慢查询列表可以减缓慢查询被剔除出列表的可能性。例如线上可以设置为1000以上。


  • slowlog-log-lower-than的设置建议


需要根据Redis的并发量调整该值。由于Redis采用单线程响应名利,对于高流量的场景,如果执行命令的时间在1毫秒以上,那么Redis最多可支撑OPS(每秒操作次数)不到1000,因此高OPS场景的Redis建议设置为1毫秒。


  • 慢查询只记录命令执行时间,并不包括命令排队时间和网络传输时间。


因此客户端命令的执行时间要大于Redis服务器实际执行命令的时间。因为命令执行排队极致,慢查询会导致命令级联阻塞,因此当客户端出现请求超时,需要检查该时间点是否有对应的慢查询,从而分析是否因为慢查询导致的命令级联阻塞


  • 慢查询日志是一个先进先出队列


慢查询较多的情况下,可能会丢失部分慢查询命令,可以定期执行slow get命令将慢查询日志持久化到其他存储中。然后制作可视化界面查询。



相关文章
|
6天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
135961 10
|
14天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201925 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
3天前
|
供应链 监控 安全
|
6天前
|
SQL 安全 前端开发
预编译为什么能防止SQL注入?
SQL注入是Web应用中常见的安全威胁,攻击者通过构造恶意输入执行未授权的SQL命令。预编译语句(Prepared Statements)是一种有效防御手段,它将SQL代码与数据分离,确保用户输入不会被解释为SQL代码的一部分。本文详细介绍了SQL注入的危害、预编译语句的工作机制,并结合实际案例和多语言代码示例,展示了如何使用预编译语句防止SQL注入,强调了其在提升安全性和性能方面的重要性。
|
9天前
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
417 34
Qwen2.5-7B-Instruct Lora 微调
|
1月前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9940 29
|
3天前
|
机器学习/深度学习 存储 人工智能
【科普向】我们所说的AI模型训练到底在训练什么?
人工智能(AI)模型训练类似于厨师通过反复实践来掌握烹饪技巧。它通过大量数据输入,自动优化内部参数(如神经网络中的权重和偏置),以最小化预测误差或损失函数,使模型在面对新数据时更加准确。训练过程包括前向传播、计算损失、反向传播和更新权重等步骤,最终生成权重文件保存模型参数,用于后续的应用和部署。理解生物神经网络的工作原理为人工神经网络的设计提供了灵感,后者广泛应用于图像识别、自然语言处理等领域。
|
2天前
|
人工智能 算法 搜索推荐
阿里云百炼xWaytoAGI共学课开课:手把手学AI,大咖带你从零搭建AI应用
阿里云百炼xWaytoAGI共学课开课啦。大咖带你从零搭建AI应用,玩转阿里云百炼大模型平台。3天课程,涵盖企业级文本知识库案例、多模态交互应用实操等,适合有开发经验的企业或独立开发者。直播时间:2025年1月7日-9日 20:00,地点:阿里云/WaytoAGI微信视频号。参与课程可赢取定制保温杯、雨伞及磁吸充电宝等奖品。欢迎加入钉钉共学群(群号:101765012406),与百万开发者共学、共享、共实践!
|
15天前
|
机器学习/深度学习 人工智能 安全
通义视觉推理大模型QVQ-72B-preview重磅上线
Qwen团队推出了新成员QVQ-72B-preview,这是一个专注于提升视觉推理能力的实验性研究模型。提升了视觉表示的效率和准确性。它在多模态评测集如MMMU、MathVista和MathVision上表现出色,尤其在数学推理任务中取得了显著进步。尽管如此,该模型仍存在一些局限性,仍在学习和完善中。