used_memory_dataset_perc 是什么
used_memory_dataset_perc 是 INFO memory 里的百分比字段,表示数据集内存在「已用内存减去启动开销」中的占比,口径为 used_memory_dataset /(used_memory - used_memory_startup)。它用一句话回答:内存主要花在业务数据上,还是花在连接、缓冲、碎片这些与数据无关的地方。
基本信息
| 字段 | used_memory_dataset_perc |
|---|---|
| 出处 | INFO memory,Redis 4.0 及以上 |
| 口径 | used_memory_dataset /(used_memory - used_memory_startup) |
| 形式 | 带百分号的字符串,如 89.7% |
| 配套字段 | used_memory_dataset、used_memory_startup、used_memory_overhead |
| 用途 | 快速判断内存归属方向 |
典型使用场景
- 扩容前体检:占比高说明加内存能直接装下更多数据
- 排查内存异常增长:占比骤降说明增长来自非数据部分
- 判断实例是否偏小:连接不多却占比低,多半是碎片或持久化缓冲
- 配合 maxmemory 规划:占比稳定的实例,数据量与内存近似线性
- 建立监控基线:把该值放进内存看板,偏离基线时触发排查
最小示例
最小示例
redis-cli INFO memory | grep used_memory_dataset_perc # 数据占比
redis-cli INFO memory | grep -E 'used_memory_human|used_memory_startup|used_memory_overhead' # 分子分母
redis-cli INFO memory | grep used_memory_dataset # 数据集字节数
redis-cli MEMORY STATS | grep -A1 dataset # 结构化口径复核占比怎么读
| 取值 | 说明 | 建议动作 |
|---|---|---|
| 90% 以上 | 内存几乎都给了数据 | 按数据量估算扩容或优化即可 |
| 70%~90% | 存在一定非数据开销 | 看 overhead.total 明细,通常无需处理 |
| 低于 70% | 开销占比偏高 | 先查连接数、输出缓冲、复制积压 |
| 明显低于自身历史基线 | 增长来自与数据结构无关的部分 | 用 MEMORY STATS 定位是哪个字段在涨 |
该口径已扣除启动开销,因此会比直接算 used_memory_dataset / used_memory 更高;做基线比较时必须始终用同一个字段。
占比高不代表物理内存没浪费:RSS 明显大于 used_memory 时,碎片要看 MEMORY STATS 里的分配器碎片比值。
排查顺序建议固定下来:先看 dataset.percentage 判断方向,再按 overhead.total 拆开销,最后看分配器碎片与 RSS 差距。顺序固定后,每次结论都能和上一次对齐,避免重复劳动。