在排查Redis数据库实例的故障和性能降低的原因时,您可以通过时延洞察功能,对数据库所有命令以及自定义特殊事件进行时延统计,得到精确到微秒级别的延迟时间,从事件、时间、时延三个维度对实例进行分析,快速定位和修复故障。
前提条件
Redis实例为如下版本,升级方法请参见升级小版本与代理版本。
Tair(Redis企业版)内存型,小版本为1.6.9及以上。若需统计Tair module命令,请升级小版本至1.7.28及以上。
社区版5.0,小版本为5.1.4及以上。
社区版6.0,小版本为0.1.15及以上。
社区版7.0,小版本为7.0.0.6及以上。
功能简介
原生Redis在2.8.13版引入延迟监控(Latency Monitoring)特性,基于事件机制帮助您发现和排查可能的时延问题。该功能仅支持获取最近160秒的数据,且只存取每秒内时延最高的事件。
时延洞察是云数据库Redis提供的升级版时延统计功能,支持记录多达27个事件及所有Redis命令的执行耗时,并支持保存最近3天内所有的时延统计数据。时延洞察具有如下特点:
持久化:支持数据持久化,时延毛刺可追溯。
高精度:支持全量事件微秒级别监控信息。
高性能:异步实现,对性能几乎无影响。
实时性:支持实时数据查询和聚合操作。
多维度:提供全面的时延信息,可支持从事件、时间、时延三个维度对实例进行分析。
费用
此功能不收费。
操作步骤
登录DAS控制台。
在左侧导航栏中,单击实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
在左侧导航栏,单击请求分析 > 时延洞察。
在时延洞察页,查看对应节点选定时间段内的统计信息。
对于集群和读写分离架构的实例,支持分别查看数据节点和代理节点的统计信息。
说明仅支持查询3天内的历史数据,且开始时间和结束时间的间隔不超过1小时。
单击列表中的统计数字,查看事件对应指标随时间的变化趋势。在趋势图中,您也可以选择对应的指标,查看其随时间的变化趋势。
说明仅会记录与展示耗时超过阈值的命令或事件。若您在使用该功能的过程中遇到实例时延问题,您可参考常见Latency(时延)事件的处理建议文档处理时延问题。
指标
说明
事件
事件名称。
总数
事件的数量。
时延avg(us)
事件的平均时延,单位 :us。
时延max(us)
事件的最大时延,单位: us。
<1ms聚合
时延小于1ms事件的聚合统计数量,单击查看<1us、<2us、<4us、<8us、<16us、<32us、<64us、<128us、<256us、<512us和<1ms等不同时间范围的统计数据。
说明不同时间范围的统计规则:例如,<1us,统计时延在0~1us之间的事件数量;<2us,统计时延在1us~2us之间的事件数量。
<2ms
<4ms
...
>33s
对应时延范围内的事件数量。
说明不同时间范围的统计规则:例如,<2ms,统计时延在1ms~2ms之间的事件数量;>33s,统计时延大于33s的事件数量。
常见特殊事件附录
类别 | 名称 | 阈值 | 说明 |
内存驱逐相关 | EvictionDel | 30ms | 在逐出周期中删除Key的耗时。 |
EvictionLazyFree | 30ms | 在逐出周期中,等待后台线程释放内存的耗时。 | |
EvictionCycle | 30ms | 一次逐出周期的耗时,包含逐出数据的选择、删除操作,及后台线程等待的时间。 | |
内存碎片整理 | ActiveDefragCycle | 100ms | 内存碎片整理过程的耗时。 |
Rehash | Rehash | 100ms | 发生Rehash过程的耗时。 |
数据结构升级 | ZipListConvertHash | 30ms | Hash编码类型转换耗时(Ziplist转换为Dict)。 |
IntsetConvertSet | 30ms | Set编码类型转换耗时(Intset转换为Set)。 | |
ZipListConvertZset | 30ms | Zset编码类型转换耗时(Ziplist转换为Skiplist)。 | |
AOF相关 | AofWriteAlone | 30ms | 一次正常写入AOF文件的耗时。 |
AofWrite | 30ms | 写入AOF(AppendOnly File)的耗时。每次成功写入AOF文件后,会记录AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一种事件。 | |
AofFstat | 30ms | Fstat的耗时。 | |
AofRename | 30ms | Rename的耗时统计。 | |
AofReWriteDiffWrite | 30ms | 子进程重写完AOF后,主进程把buffer中的增量AOF写入的耗时。 | |
AofWriteActiveChild | 30ms | 写入AOF文件的耗时,写入过程中存在其他子进程也在向磁盘写数据等情况。 | |
AofWritePendingFsync | 30ms | 写入AOF文件的耗时,写入过程中存在后台进程正在执行fsync。 | |
RDB相关 | RdbUnlinkTempFile | 50ms | bgsave子进程中断后删除临时RDB文件的耗时。 |
其他 | Commands | 30ms | 常规命令(未被标为fast)的耗时。 |
FastCommand | 30ms | 被标为fast的命令(命令的时间复杂度为O(1)和O(log N))的耗时。标为fast的命令具体请参见FastCommand清单。 | |
EventLoop | 50ms | Main Loop一次的耗时。 | |
Fork | 100ms | 调用Fork操作的耗时。 | |
Transaction | 50ms | 实际事务执行的耗时。 | |
PipeLine | 50ms | 多线程Pipeline耗时。 | |
ExpireCycle | 30ms | 一次清理过期Key周期的耗时。 | |
ExpireDel | 30ms | 在清理过期Key周期中,删除Key的耗时。 | |
SlotRdbsUnlinkTempFile | 30ms | Slot bgsave子进程中断后删除临时RDB文件的耗时。 | |
LoadSlotRdb | 100ms | Slot载入至(load)RDB的耗时。 | |
SlotreplTargetcron | 50ms | Slot子进程载入至(load)RDB到一个临时的数据库(DB)后,再将其移动至目标数据库(DB)的耗时。 |
FastCommand清单
清单中列举了常用的命令,更多命令请在Commands | Redis官网中查看。ACL类中带有@fast标记的命令均属于FastCommand。
ACCOUNT | ADMINAUTH | ASKING | AUTH |
BKLIST | BZPOPMAX | BZPOPMIN | DBSIZE |
DECR | DECRBY | DISCARD | ECHO |
EXISTS | EXPIRE | EXPIREAT | Get |
GETBIT | HDEL | HEXISTS | HGET |
HINCRBY | HINCRBYFLOAT | HKCOUNTER | HKSWITCH |
HLEN | HMGET | HMINCRBY | HMINCRBYFLOAT |
HMSET | HSET | HSETNX | HSTRLEN |
INCR | INCRBY | INCRBYFLOAT | LASTSAVE |
LLEN | LPOP | LPUSH | LPUSHX |
MGET | MOVE | MULTI | PERSIST |
PEXPIRE | PEXPIREAT | PFADD | PING |
PTTL | PUBLISH | READONLY | READWRITE |
RENAMENX | RPOP | RPUSH | RPUSHX |
SADD | SCARD | SELECT | SETNX |
SISMEMBER | SMOVE | SPOP | SREM |
STRLEN | SWAPDB | TIME | TOUCH |
TTL | TYPE | UNLINK | UNWATCH |
WATCH | XACK | XADD | XCLAIM |
XDEL | XLEN | XSETID | XTRIM |
ZADD | ZCARD | ZCOUNT | ZINCRBY |
ZLEXCOUNT | ZPOPMAX | ZPOPMIN | ZRANK |
ZREM | ZREVRANK | ZSCORE | ZSCOREAVG |