
- 慢查询 & Latency——慢日志阈值设置,Intrinsic Latency 测试
(接上文《18. 生产级延迟分布可视化》)
19.1 为什么“阈值”比“日志”更关键
在 Redis 6.2 之前,慢日志只有“执行时间”一个维度,单位 μs,阈值通过 slowlog-log-slower-than 设置。很多运维同学直接把默认值 10000 μs(10 ms)搬到生产,结果两类悲剧反复出现:
- 业务抱怨“RT 毛刺 5 ms 却查不到慢日志”,因为 5 ms < 10 ms;
- 监控大屏“慢查询每秒 3k 条”,其实全是 11 ms 的 MGET,真正的 200 ms 大 key 被淹没。
因此,阈值不是“越小越好”,而是“刚好能区分 Intrinsic Latency 与业务 Latency”。下面给出可落地的调参公式与压测方法。
19.2 慢日志阈值三步校准法
Step 1 测量 Intrinsic Latency(基线延迟)
Intrinsic Latency 指“Redis 自己在最坏情况下的调度延迟”,与业务请求无关。Redis 自带工具:
# 在实例所在物理机执行,10 秒采样
redis-cli --intrinsic-latency 10
输出示例:
Max latency so far: 487 microseconds.
把“Max latency”记为 Lmax;它反映了内核调度、NUMA、电源管理、透明大页等系统噪声。
Step 2 计算业务可接受毛刺系数
定义
阈值 = Lmax × α + β
- α:业务毛刺系数,推荐 3~5(3 sigma 原则,覆盖 99.7 % 系统噪声)
- β:附加容忍度,覆盖网络、框架、容器开销;物理机可设 0,K8s 宿主机建议 200 μs
继续以上例:
阈值 = 487 × 3 + 200 = 1661 μs ≈ 1.7 ms
向上取整到毫秒位,最终阈值 2 ms。
Step 3 灰度验证
- 动态修改:
CONFIG SET slowlog-log-slower-than 2000 - 观察 30 min 慢日志条数 / 总 QPS 比例;若 < 0.1 %,说明阈值合理;若 > 1 %,回滚到 5 ms 再逐步下调。
19.3 慢日志字段解读与结构化
Redis 7.0 新增 slowlog-format json,推荐直接落地到 Loki/ES,方便下钻。核心字段:
id:自增,可用来计算“慢查询速率”。duration_us:包含命令排队 + 执行 + 写 AOF 耗时,但不包含网络 IO。client_addr:若看到 127.0.0.1:xxxxx,大概率是本地监控脚本,可过滤。cmdstat_*:7.0 新增,直接给出该命令在采样周期内的总调用次数、总耗时,可一次性定位“热 key”而非“单次慢”。
19.4 把 Intrinsic Latency 做成 SLA 探针
Intrinsic Latency 测试对 CPU 抢占极度敏感,可封装为 DaemonSet,每 30 s 采样一次,输出 Prometheus metric:
# HELP redis_intrinsic_latency_us Max latency seen in last test
# TYPE redis_intrinsic_latency_us gauge
redis_intrinsic_latency_us{instance="redis-0"} 512
告警规则:
- alert: RedisSystemNoiseHigh
expr: redis_intrinsic_latency_us > 1000
for: 2m
annotations:
summary: "Redis 基线延迟超过 1 ms,需检查宿主机 CPU 抢占、电源模式"
当该告警触发时,任何高于 2 ms 的慢日志都可能是系统级问题,而非业务大 key,避免盲目拆分数据。
19.5 常见踩坑清单
- 容器限速:cgroups cpu.max 10ms/100ms 周期下,Intrinsic Latency 必然飙到 10 ms;此时把慢日志阈值调到 20 ms 只是掩耳盗铃,根本做法是提升 quota 或绑核。
- 大页干扰:开启 THP 后,Intrinsic Latency 偶发 20 ms+;关闭 THP 或改用 madvise 即刻回落。
- 多租户混部:同一宿主机运行离线计算,cat /proc/interrupts 看到 RES 频繁,Intrinsic Latency 与慢日志同步上涨,可用 irqbalance 或 tuna 把 Redis 绑到单独 NUMA node。
19.6 小结
慢日志不是“越细越好”,而是“刚好比系统基线大一点”。通过 Intrinsic Latency 先量化环境噪声,再用 3 sigma+β 模型设定阈值,可在“不漏报”与“不爆炸”之间取得平衡。把 Intrinsic Latency 本身作为 SLA 探针,还能提前发现宿主机抢占、电源模式、大页等隐性故障,真正做到“慢查询可解释、延迟可预测”。
更多技术文章见公众号: 大城市小农民
1077

被折叠的 条评论
为什么被折叠?



