bigywater.tech
Redis · 98

LATENCY LATEST 与延迟事件

LATENCY LATEST、HISTORY、GRAPH、RESET 是延迟监控的四个基础命令。这篇不看报告,只看数据:每个命令返回什么结构、采样的粒度是多大、RESET 之后剩什么、阈值边界在哪。

4 个字段
LATENCY LATEST 每行:事件名、最近时间戳、最近毫秒数、历史最大毫秒数
1 秒 1 点
同一秒里的多个慢事件在 HISTORY 里只有一个采样点(该秒最大值)
阈值
不超过 latency-monitor-threshold 的事件不被记录

LATENCY LATEST

实测 · 本机执行输出
1) 1) "command"
   2) (integer) 1790706093
   3) (integer) 11
   4) (integer) 100
2) 1) "aof-fsync-always"
   2) (integer) 1790706090
   3) (integer) 9
   4) (integer) 9

每个事件类型一行,四个字段。第一次出现的 command 事件最近一次 11 ms、历史最大 100 ms。

LATENCY HISTORY

实测 · 本机执行输出
1) 1) (integer) 1790706091
   2) (integer) 100
2) 1) (integer) 1790706093
   2) (integer) 11

返回该事件最近的采样点。我在同一秒内连续制造了 DEBUG SLEEP(30/60/90 ms)和 KEYS *,只得到一个 100 ms 的采样点,另一个 11 ms 的点来自稍晚的另一秒。

LATENCY GRAPH

实测 · 本机执行输出
command - high 100 ms, low 11 ms (all time high 100 ms)
--------------------------------------------------------------------------------
# 
| 
| 
|_
  
53
ss

标题里的 high、low 是当前保留的采样中的最大、最小值,括号里是历史最大;下面是竖条,最下面的数字是每一列距今的时间。

LATENCY RESET

实测 · 本机执行输出
> LATENCY RESET
(integer) 2
> LATENCY LATEST
(empty array)

返回被清除的事件数(2:command 与 aof-fsync-always),清完之后 LATEST 为空。

阈值边界

实测 · 本机执行输出
  阈值 100 ms,DEBUG SLEEP 0.05 之后 LATENCY LATEST = []
  再 DEBUG SLEEP 0.15 之后 LATENCY LATEST = [('command', 151)]

阈值 100 ms 时 50 ms 的阻塞不记录,150 ms 的记录为 151 ms。

分步演示:四个命令

LATENCY LATEST 与延迟事件
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 / Redis 8.10.2 独立实例(本机回环端口,save 关闭),redis-cli 风格输出由自写的 RESP 客户端打印;计时用 time.perf_counter,数字每次运行会有小幅抖动。数据来自第 97 篇同一次实验
    • 没有验证:HISTORY 最多保留的采样点数、GRAPH 的刻度规则、多个事件类型同时出现、其它事件类型(fork、expire-cycle 等)
    京ICP备2026067502号-1京公网安备11010502063487号