首页/数据/Redis 进阶速查/慢查询定位流程
性能与排障129 条

慢查询定位流程

定位流程:SLOWLOG 找候选命令 → 复现并测复杂度 → 检查数据规模(大键/大集合)→ 评估是否集中触发(后台任务/批处理)→ 优化命令或数据结构。

Redis 进阶速查数据更新于 2026-10-13

慢查询定位流程

慢查询定位是一条固定流程:从 SLOWLOG 找候选命令 → 复现并确认复杂度 → 检查数据规模(大键、大集合、元素很多的结构)→ 判断是否集中触发(后台任务、批处理、定时脚本)→ 优化命令写法或改造数据结构,最后回测确认慢条目消失。

定位步骤

第 1 步SLOWLOG 采样,确定候选命令、耗时与来源客户端
第 2 步确认时间复杂度与实际数据规模是否匹配
第 3 步检查是否集中触发,区分业务流量与后台任务
第 4 步优化:换命令写法、拆数据结构、改写访问模式
第 5 步回测:SLOWLOG RESET 后重跑同一业务流程

常见慢命令与替代思路

慢命令问题所在替代思路
KEYS遍历整个键空间改用 SCAN 分批遍历
HGETALL 或 SMEMBERS 大集合一次性返回全部元素分批取字段,或用 HSCAN 迭代
DEL 大键一次性释放开销集中在主线程改用 UNLINK 异步释放
SORT排序自身开销大移到应用侧排序或做预计算结果
LRANGE 取全量返回元素过多分页读取,限制返回条数

取证与验证

取证与验证
redis-cli SLOWLOG GET 20                # 看候选命令与来源
redis-cli TYPE suspect:key && redis-cli MEMORY USAGE suspect:key
redis-cli HLEN suspect:key              # 大集合看规模:LLEN、SCARD、ZCARD 同理
redis-cli INFO commandstats | grep -E 'cmdstat_(keys|hgetall|smembers)'
redis-cli SLOWLOG RESET                 # 清空后重跑流程做对照

典型使用场景

  • 慢日志巡检:定期把上榜命令过一遍,识别结构性写法问题
  • 发布后回退定位:对比发布前后的慢命令清单
  • 数据结构改造前取证:确认元素规模与单键体积
  • 客户端写法审查:识别批量全量取数这类高风险调用
  • 区分与后台任务相关的条目,避免误判方向
同一条命令昨天不慢今天慢,通常指向数据规模增长;先量元素个数与键体积,再决定是改命令还是拆结构。
有些条目来自后台任务或运维脚本(全量扫描、批量修复),从来源地址与命令形状就能区分,别把这类流量当成业务问题去优化

易错点

  • 只优化命令不看数据增长,问题会随规模回来
  • 把后台重写、定时扫描类任务当成业务命令,优化方向误判
  • 直接在生产用 KEYS 复现问题,复现动作本身就造成阻塞
  • 优化后不回测,无法确认慢条目是否真的消失
  • 只盯单次耗时最高的条目,忽略调用量大的命令(commandstats)

数据来源与参考

  • Redis 官方文档:延迟排查方法
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌