Azure托管 Redis 支持许多内置 Redis 命令,这些命令可帮助你监视性能、诊断问题并了解缓存的行为。 您可以在 Azure 门户的控制台边栏窗口中运行这些命令,也可以通过任何连接到您的缓存的 Redis 客户端运行这些命令。
本文介绍最常用的诊断命令,并介绍了它们在 Azure Managed Redis 上的行为方式。
SLOWLOG
Redis 慢日志记录执行时间超过可配置阈值的命令。 使用它查找可能导致延迟或超时问题的昂贵命令。
执行时间仅度量 Redis 引擎处理命令的时间。 它不包括网络 I/O、客户端通信或在队列中等待所花费的时间。
SLOWLOG 在 Azure 托管 Redis 上的工作原理
Azure托管 Redis 使用 Redis Enterprise,它通过代理层路由所有客户端流量。 SLOWLOG 的行为取决于缓存上配置的群集策略:
-
企业集群策略:代理会自动将
SLOWLOG GET、SLOWLOG LEN和SLOWLOG RESET分发到所有主分片,并以一个统一列表返回合并后的结果。 无需查询单个分片即可获取慢速命令的群集范围视图。 - OSS 群集策略:每个节点都有自己的终结点,SLOWLOG 仅从该节点的本地分片返回条目。 在 OSS 群集模式下,Redis 客户端库根据密钥哈希槽自动将命令路由到正确的节点。 若要在整个缓存中收集慢速命令的完整视图,客户端库必须查询每个节点。 大多数 Redis 客户端库都通过支持集群的命令来实现这一点。
SLOWLOG 命令
| 命令 | DESCRIPTION |
|---|---|
SLOWLOG GET [count] |
获取最新的慢命令条目。 可选 count 限制返回的条目数。 |
SLOWLOG LEN |
返回当前慢日志中的条目数。 |
SLOWLOG RESET |
清除慢速日志中的所有条目。 |
配置 SLOWLOG
两个配置参数控制 SLOWLOG 行为:
| 参数 | DESCRIPTION | 默认 |
|---|---|---|
slowlog-log-slower-than |
阈值(以微秒为单位)。 记录超过此值的命令。 将其设置为 0 以记录每条命令。 设置为 -1,禁用。 |
10,000 (10 毫秒) |
slowlog-max-len |
每个分片存储的最大条目数。 日志已满时,将删除最早的条目。 | 128 |
若要查看或更改这些设置,请执行以下操作:
CONFIG GET slowlog-log-slower-than
CONFIG SET slowlog-log-slower-than 5000
CONFIG GET slowlog-max-len
CONFIG SET slowlog-max-len 256
注释
该 slowlog-max-len 设置适用于每个分片。 在具有企业群集策略的缓存中, SLOWLOG GET 返回所有主分片的合并结果,因此返回的条目总数最多可以 slowlog-max-len 乘以主分片数。 允许的最大值为 slowlog-max-len 1,024。
解读 SLOWLOG 结果
- 执行时间仅为分片处理时间。 这不包括网络延迟、代理开销或在命令队列中等待的时间。
- 条目 ID 可能不会在重启时按顺序排列。 发生故障转移或分片重启时,条目 ID 计数器会重置。 改用时间戳、执行时间和命令的组合来标识唯一条目。
- 内部群集流量。 在低阈值(低于 1,000 微秒)时,你可能会看到内部群集管理命令,例如
INFO和PING。 这些命令是正常的,可以忽略。
常见的昂贵命令
| 命令 | 时间复杂性 | Recommendation |
|---|---|---|
KEYS * |
O(N) | 替换为 SCAN 以进行增量迭代。 |
SORT |
O(N+M*log(M)) | 对于大型集合,应避免这样做,或使用 LIMIT 和 BY 子句。 |
LRANGE 在大型列表中 |
O(S+N) | 使用小范围分页。 |
SMEMBERS 在大型数据集上 |
O(N) | 使用 SSCAN 进行增量迭代。 |
HGETALL 关于较大的哈希 |
O(N) | 使用 HSCAN 或 HMGET 用于特定字段。 |
ZRANGEBYSCORE 在大型有序集合上 |
O(log(N)+M) | 用于 LIMIT 限制结果大小。 |
有关 SLOWLOG 命令的完整参考,请参阅 Redis 文档中的 SLOWLOG GET。
信息
该 INFO 命令以易于读取和分析的格式返回有关 Redis 服务器的信息和统计信息。 它涵盖内存使用情况、CPU 消耗、复制状态、密钥空间统计信息等。
INFO [section]
常用部分:
| 章节 | DESCRIPTION |
|---|---|
INFO memory |
内存使用情况、碎片比率和分配器统计信息。 |
INFO cpu |
Redis 进程消耗的 CPU 时间。 |
INFO stats |
常规统计数据,例如接收的连接总数、已处理的命令数,以及键空间命中次数和未命中次数。 |
INFO replication |
复制状态,包括实例是主实例还是副本和复制偏移量。 |
INFO keyspace |
数据库级密钥计数和过期统计信息。 |
INFO clients |
已连接客户端数量和被阻止客户端数量。 |
INFO server |
Redis 版本、运行时间和配置详细信息。 |
注释
对于采用 Enterprise Cluster 策略的 Azure Managed Redis,INFO 会返回你所连接节点的聚合信息。 使用 OSS 群集策略,每个节点终结点返回自己的本地信息。
有关完整的命令参考,请参阅 Redis 文档中的 INFO。
监视
该 MONITOR 命令实时流式传输 Redis 服务器处理的每个命令。 此命令可用于调试,因为你可以准确查看应用程序发送的命令。
MONITOR
Warning
MONITOR 资源密集型,可能会降低缓存性能。 它仅用于非生产环境中的简短调试会话。 不要让 MONITOR 在生产环境中运行。
有关完整的命令参考,请参阅 Redis 文档中的 MONITOR 。
命令统计信息
该 INFO commandstats 部分提供每命令执行统计信息,包括每个命令类型的调用数、总执行时间和平均执行时间。
INFO commandstats
使用命令统计信息可以执行以下操作:
- 查找哪些命令类型消耗了执行时间最多的时间。
- 识别不经常调用但成本高昂的命令。
- 为您的工作负载建立正常命令模式基线。
有关详细信息,请参阅 commandstats Redis 文档中 INFO 下的部分。
建议的诊断工作流
检查缓存延迟指标。 在Azure门户中,打开缓存并选择“监视>指标”。 添加 缓存延迟(微秒) 指标。 如果看到持续的高值,请转到下一步。
查看慢日志。
SLOWLOG GET 25查找执行时间高或频繁出现的命令。
查看命令统计信息。 运行
INFO commandstats以查看哪些命令类型在工作负荷中消耗的时间最多。根据需要降低 SLOWLOG 阈值。 如果慢速日志为空,但延迟较高,请暂时降低阈值:
CONFIG SET slowlog-log-slower-than 1000识别并优化。 常见模式包括:
- 主宰日志的单个命令类型 - 优化或替换命令。
- 针对特定大型键的命令——请考虑拆分大型数据结构。
- 在同一时间戳处条目集中出现——表明存在一个阻塞命令,使其他命令在其后排队。
重置并监控。 进行更改后,清除慢速日志并再次检查:
SLOWLOG RESET还原默认值。 诊断后,还原默认的 SLOWLOG 阈值:
CONFIG SET slowlog-log-slower-than 10000