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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 Tair(兼容Redis),内存型 2GB
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命令将慢查询日志持久化到其他存储中。然后制作可视化界面查询。



相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
9月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的服务器日志文件
本文介绍了PostgreSQL数据库的物理存储结构,重点讨论了服务器日志文件。通过`pg_ctl`命令启动PostgreSQL实例时,使用`-l`参数指定日志文件位置,记录数据库启动、运行及关闭过程中的关键信息。附有相关视频讲解和日志文件示例。
264 0
|
24天前
|
存储 负载均衡 NoSQL
【赵渝强老师】Redis Cluster分布式集群
Redis Cluster是Redis的分布式存储解决方案,通过哈希槽(slot)实现数据分片,支持水平扩展,具备高可用性和负载均衡能力,适用于大规模数据场景。
129 2
|
2月前
|
负载均衡 NoSQL Redis
【赵渝强老师】Redis的主从复制集群
Redis主从复制是指将一台Redis服务器的数据复制到其他Redis服务器,实现数据热备份、故障恢复、负载均衡及高可用架构的基础。主节点负责写操作,从节点同步数据并可提供读服务,提升并发处理能力。
|
5月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
6月前
|
运维 监控 NoSQL
【赵渝强老师】监控Redis
Redis 实例的监控是运维管理中的关键内容,主要包括内存、吞吐量、运行时信息和延时的监控。 1. **监控内存**:使用 `info memory` 可查看 Redis 内存使用情况,包括已用内存、峰值内存等。 2. **监控吞吐量**:通过 `info stats` 获取每秒处理命令数(OPS)、网络输入输出流量等。 3. **监控运行时信息**:利用 `info` 命令结合 `grep` 过滤出客户端连接数、拒绝连接数等重要信息。 4. **监控延时**:可以通过客户端手动监控或服务器内部延迟监控来检测延时问题。
189 3
|
6月前
|
SQL 数据库
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到
|
9月前
|
存储 NoSQL 安全
【赵渝强老师】MongoDB的Journal日志
MongoDB通过Journal日志保证数据安全,记录检查点后的更新,确保数据库从异常中恢复到有效状态。每个Journal文件100M,存于--dbpath指定的journal子目录。默认已启用Journal日志,可通过--journal参数手动启用。WiredTiger存储引擎使用128KB内存缓冲区,异常关机时可能丢失最多128KB的数据。视频讲解和详细步骤参见附录。
200 17
|
9月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的WAL预写日志文件
PostgreSQL数据库的物理存储结构包含多种文件,其中WAL(预写日志)用于确保数据完整性和高效恢复。WAL机制允许在不频繁刷新数据至磁盘的情况下,通过先写日志再改数据的方式,减少I/O操作,提高性能。每个WAL文件默认大小为16MB,位于pg_wal目录下,支持手动和自动切换。WAL不仅有助于数据恢复,还能显著降低I/O成本。
275 4
|
9月前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
260 3
|
10月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
159 4

相关产品

  • 云数据库 Tair(兼容 Redis)