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

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
云数据库 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命令将慢查询日志持久化到其他存储中。然后制作可视化界面查询。



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的服务器日志文件
本文介绍了PostgreSQL数据库的物理存储结构,重点讨论了服务器日志文件。通过`pg_ctl`命令启动PostgreSQL实例时,使用`-l`参数指定日志文件位置,记录数据库启动、运行及关闭过程中的关键信息。附有相关视频讲解和日志文件示例。
101 0
|
2月前
|
存储 NoSQL 安全
【赵渝强老师】MongoDB的Journal日志
MongoDB通过Journal日志保证数据安全,记录检查点后的更新,确保数据库从异常中恢复到有效状态。每个Journal文件100M,存于--dbpath指定的journal子目录。默认已启用Journal日志,可通过--journal参数手动启用。WiredTiger存储引擎使用128KB内存缓冲区,异常关机时可能丢失最多128KB的数据。视频讲解和详细步骤参见附录。
63 17
|
3月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
191 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的WAL预写日志文件
PostgreSQL数据库的物理存储结构包含多种文件,其中WAL(预写日志)用于确保数据完整性和高效恢复。WAL机制允许在不频繁刷新数据至磁盘的情况下,通过先写日志再改数据的方式,减少I/O操作,提高性能。每个WAL文件默认大小为16MB,位于pg_wal目录下,支持手动和自动切换。WAL不仅有助于数据恢复,还能显著降低I/O成本。
|
2月前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
|
3月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
3月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的binlog日志文件
MySQL的binlog日志记录了所有对数据库的更改操作(不包括SELECT和SHOW),主要用于主从复制和数据恢复。binlog有三种模式,可通过设置binlog_format参数选择。示例展示了如何启用binlog、设置格式、查看日志文件及记录的信息。
311 6
|
3月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
302 3
|
3月前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
105 6
|
3月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的撤销日志文件和错误日志文件
本文介绍了MySQL的物理存储结构,重点讲解了InnoDB存储引擎中的撤销日志文件(undo log)和错误日志文件。从MySQL 8.0开始,默认生成两个10MB的undo表空间文件,并支持动态扩容和收缩。错误日志文件记录了MySQL启动、运行、关闭过程中的问题,通过示例展示了如何查看和使用这些日志。

相关产品

  • 云数据库 Tair(兼容 Redis)