数据库自治服务DAS支持缓存分析功能,通过分析Redis的备份文件,可以快速发现实例中的大Key,帮助您掌握Key在内存中的占用和分布、Key过期时间等信息,为您的优化操作提供数据支持,帮助您避免因Key倾斜引发的内存不足、性能下降等问题。
功能说明
缓存分析功能基于Redis持久化策略RDB(Redis Database),现已支持Redis 7.0。
使用限制
目标数据库实例已接入DAS,且实例接入状态为接入正常。
不支持Tair磁盘型实例。
只支持分析Redis数据结构和以下Tair自研数据结构:TairString、TairHash、TairGIS、TairBloom、TairDoc、TairCpc、TairZset,暂不支持分析其他Tair自研数据结构。
如果目标实例规格已发生变更,则不支持分析实例变更前的备份文件。
操作步骤
登录DAS控制台。
在左侧导航栏中,单击实例监控。
找到目标实例,单击实例ID,进入目标实例详情页。
在左侧导航栏选择请求分析 > 缓存分析。
在缓存分析页右侧,单击立即分析。
在缓存分析对话框中,设置如下参数。
配置
说明
选择分析节点
选择需要执行缓存分析的节点ID。
说明您可以选择分析整个实例,也可以只选中某个节点进行分析。
分析方式
根据需要,选择不同的备份文件进行分析:
使用上一个备份文件:分析当前最新的备份文件。
新建备份, 并使用最新的备份进行分析:立即新建一次备份,待备份完成后对其进行分析,该方式可分析实例当前的状态。
选择历史备份文件:允许选择并分析任意历史备份文件。
说明在分析已存在的备份文件时,请确认备份文件的时间点,是否符合预期。
分隔符
根据需要,输入用于识别Key前缀的分隔符。当分隔符为默认的
:;,_-+@=|#
时,不需要输入。单击确定。
在缓存分析列表找到已完成的分析任务,在右侧操作栏中,单击详情,查看如下分析结果:
基本信息:目标实例基本属性和分析方法等情况。
相关节点:Redis社区版集群架构内各个节点的内存情况和Key统计信息。
说明只有选择分析整个Redis社区版集群架构实例时,才会展示该信息。
详情:目标实例的内存占用情况、Key内存占有的近一周日均增长量、Key总数量、Key内存占有情况、Key数量分布情况、Elements内存占用情况、Elements数量分布情况、Key过期时间分布 (内存)、Key过期时间分布 (数量),以及内存占有量、总数量、Key前缀在前100的大Key信息。
常见问题
Q:为什么缓存分析结果展示的Key内存占有会比实际使用的内存小?
A:因为缓存分析结果实际只是解析了Key和对应value在RDB中序列化后占用的大小,这个只占用了used_memory中的一部分,used_memory还包含了如下部分:
Key和value所对应的struct和指针大小。在jemalloc分配后,字节对齐部分所占用的大小也没计算在used_memory中,例如在2.5亿Key的数量下,struct、指针、字节对齐这三部分的大小加起来约有2~3 GB。
客户端输出缓冲区、查询缓冲区、AOF重写缓冲区和主从复制的backlog,这些也没计算到缓存分析中。
Q:Redis缓存分析的前缀分隔符是什么?
A:目前Redis缓存分析的前缀分隔符是按照固定的前缀
:;,_-+@=|#
区分的字符串。Q:为什么Redis缓存分析中String类型Key的元素数量和元素长度是一样的?
A:在Redis缓存分析中,针对String类型的Key,其元素数量就是其元素长度。
Q:如何处理报错
decode rdbfile error: rdb: unknown object type 116 for key XX
?A:该报错表示Redis实例里面存在非标准的Bloom结构,您可以把这些Bloom结构的Key删掉,或者将Redis实例升级到Redis企业版(Tair),并将非标准的Bloom结构修改为TairBloom结构。
Q:如何处理报错
decode rdbfile error: rdb: invalid file format
?A:该报错表示所选的备份文件无效,请检查实例是否在该备份时间点后进行了变配;或者实例是否开启了透明数据加密TDE(该功能无法分析已加密的信息)。
Q:如何处理报错
decode rdbfile error: rdb: unknown module type
?A:该报错表示备份文件中存在Tair自研数据结构,暂不支持分析。
Q:如何处理新建备份, 并使用最新的备份进行分析后报错
XXX backup failed
?A:该实例当前存在正在执行的BGSAVE或BGREWRITEAOF命令,导致创建用于缓存分析任务的备份时出现了失败的情况。建议您选择业务低峰期新建备份, 并使用最新的备份进行分析或者选择历史备份文件进行分析。
Q:为什么Stream数据结构的缓存分析结果是实际值的数倍?
A:Stream数据结构底层使用基数树(Radix Tree)和紧凑列表(listpack),数据结构复杂。缓存分析功能目前无法精确获得此类复杂数据结构的内存占用情况,只能进行估算,因此缓存分析结果存在偏差。
说明缓存分析结果的偏差仅为数据统计偏差,不影响数据库实例的功能。
相关文档
当您在Redis控制台使用缓存分析功能时,请参见离线全量Key分析。
相关API
API | 描述 |
创建缓存分析任务。 | |
查询缓存分析任务详情。 | |
查询缓存分析任务列表。 |