19.慢查询 & Latency——慢日志阈值设置,Intrinsic Latency 测试

在这里插入图片描述

  1. 慢查询 & Latency——慢日志阈值设置,Intrinsic Latency 测试
    (接上文《18. 生产级延迟分布可视化》)

19.1 为什么“阈值”比“日志”更关键

在 Redis 6.2 之前,慢日志只有“执行时间”一个维度,单位 μs,阈值通过 slowlog-log-slower-than 设置。很多运维同学直接把默认值 10000 μs(10 ms)搬到生产,结果两类悲剧反复出现:

  1. 业务抱怨“RT 毛刺 5 ms 却查不到慢日志”,因为 5 ms < 10 ms;
  2. 监控大屏“慢查询每秒 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 灰度验证
  1. 动态修改:
    CONFIG SET slowlog-log-slower-than 2000
    
  2. 观察 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 常见踩坑清单

  1. 容器限速:cgroups cpu.max 10ms/100ms 周期下,Intrinsic Latency 必然飙到 10 ms;此时把慢日志阈值调到 20 ms 只是掩耳盗铃,根本做法是提升 quota 或绑核。
  2. 大页干扰:开启 THP 后,Intrinsic Latency 偶发 20 ms+;关闭 THP 或改用 madvise 即刻回落。
  3. 多租户混部:同一宿主机运行离线计算,cat /proc/interrupts 看到 RES 频繁,Intrinsic Latency 与慢日志同步上涨,可用 irqbalance 或 tuna 把 Redis 绑到单独 NUMA node。

19.6 小结

慢日志不是“越细越好”,而是“刚好比系统基线大一点”。通过 Intrinsic Latency 先量化环境噪声,再用 3 sigma+β 模型设定阈值,可在“不漏报”与“不爆炸”之间取得平衡。把 Intrinsic Latency 本身作为 SLA 探针,还能提前发现宿主机抢占、电源模式、大页等隐性故障,真正做到“慢查询可解释、延迟可预测”。
更多技术文章见公众号: 大城市小农民

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔丹搞IT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值