时延洞察

在排查云数据库 Tair(兼容 Redis)数据库实例的故障和性能降低的原因时,您可以通过时延洞察功能,对数据库所有命令以及自定义特殊事件进行时延统计,得到精确到微秒级别的延迟时间,从事件、时间、时延三个维度对实例进行分析,快速定位和修复故障。

前提条件

云数据库 Tair(兼容 Redis)实例为如下版本,升级方法请参见升级小版本与代理版本

  • Tair(企业版)内存型,小版本为1.6.9及以上。若需统计Tair module命令,请升级小版本至1.7.28及以上。

  • Redis开源版5.0,小版本为5.1.4及以上。

  • Redis开源版6.0,小版本为0.1.15及以上。

  • Redis开源版7.0,小版本为7.0.0.6及以上。

功能简介

原生Redis在2.8.13版引入延迟监控(Latency Monitoring)特性,基于事件机制帮助您发现和排查可能的时延问题。该功能仅支持获取最近160秒的数据,且只存取每秒内时延最高的事件。

时延洞察是云数据库 Tair(兼容 Redis)提供的升级版时延统计功能,支持记录多达27个事件及所有Redis命令的执行耗时,并支持保存最近3天内所有的时延统计数据。时延洞察具有如下特点:

  • 持久化:支持数据持久化,时延毛刺可追溯。

  • 高精度:支持全量事件微秒级别监控信息。

  • 高性能:异步实现,对性能几乎无影响。

  • 实时性:支持实时数据查询和聚合操作。

  • 多维度:提供全面的时延信息,可支持从事件、时间、时延三个维度对实例进行分析。

费用

此功能不收费。

操作步骤

  1. 登录DAS控制台

  2. 在左侧导航栏中,单击实例监控

  3. 找到目标实例,单击实例ID,进入目标实例详情页。

  4. 在左侧导航栏,单击请求分析 > 时延洞察

  5. 时延洞察页,查看对应节点选定时间段内的统计信息。

    对于集群和读写分离架构的实例,支持分别查看数据节点代理节点的统计信息。

    说明

    仅支持查询3天内的历史数据,且开始时间和结束时间的间隔不超过1小时。

    单击列表中的统计数字,查看事件对应指标随时间的变化趋势。在趋势图中,您也可以选择对应的指标,查看其随时间的变化趋势。

    说明

    仅会记录与展示耗时超过阈值的命令或事件。若您在使用该功能的过程中遇到实例时延问题,您可参考常见Latency(时延)事件的处理建议文档处理时延问题。

    pqus

    指标

    说明

    事件

    事件名称。

    总数

    事件的数量。

    时延avg(us)

    事件的平均时延,单位 :us。

    时延max(us)

    事件的最大时延,单位: us。

    <1ms聚合

    时延小于1ms事件的聚合统计数量,单击zhankai查看<1us、<2us、<4us、<8us、<16us、<32us、<64us、<128us、<256us、<512us和<1ms等不同时间范围的统计数据。

    说明

    不同时间范围的统计规则:例如,<1us,统计时延在0~1us之间的事件数量;<2us,统计时延在1us~2us之间的事件数量。

    <2ms

    <4ms

    ...

    >33s

    对应时延范围内的事件数量。

    说明

    不同时间范围的统计规则:例如,<2ms,统计时延在1ms~2ms之间的事件数量;>33s,统计时延大于33s的事件数量。

常见特殊事件附录

类别

名称

阈值

说明

内存驱逐相关

EvictionDel

30ms

在逐出周期中删除Key的耗时。

EvictionLazyFree

30ms

在逐出周期中,等待后台线程释放内存的耗时。

EvictionCycle

30ms

一次逐出周期的耗时,包含逐出数据的选择、删除操作,及后台线程等待的时间。

内存碎片整理

ActiveDefragCycle

100ms

内存碎片整理过程的耗时。

Rehash

Rehash

100ms

发生Rehash过程的耗时。

数据结构升级

ZipListConvertHash

30ms

Hash编码类型转换耗时(Ziplist转换为Dict)。

IntsetConvertSet

30ms

Set编码类型转换耗时(Intset转换为Set)。

ZipListConvertZset

30ms

Zset编码类型转换耗时(Ziplist转换为Skiplist)。

AOF相关

AofWriteAlone

30ms

一次正常写入AOF文件的耗时。

AofWrite

30ms

写入AOF(AppendOnly File)的耗时。每次成功写入AOF文件后,会记录AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一种事件。

AofFstat

30ms

Fstat的耗时。

AofRename

30ms

Rename的耗时统计。

AofReWriteDiffWrite

30ms

子进程重写完AOF后,主进程把buffer中的增量AOF写入的耗时。

AofWriteActiveChild

30ms

写入AOF文件的耗时,写入过程中存在其他子进程也在向磁盘写数据等情况。

AofWritePendingFsync

30ms

写入AOF文件的耗时,写入过程中存在后台进程正在执行fsync。

RDB相关

RdbUnlinkTempFile

50ms

bgsave子进程中断后删除临时RDB文件的耗时。

其他

Commands

30ms

常规命令(未被标为fast)的耗时。

FastCommand

30ms

被标为fast的命令(命令的时间复杂度为O(1)和O(log N))的耗时。标为fast的命令具体请参见FastCommand清单

EventLoop

50ms

Main Loop一次的耗时。

Fork

100ms

调用Fork操作的耗时。

Transaction

50ms

实际事务执行的耗时。

PipeLine

50ms

多线程Pipeline耗时。

ExpireCycle

30ms

一次清理过期Key周期的耗时。

ExpireDel

30ms

在清理过期Key周期中,删除Key的耗时。

SlotRdbsUnlinkTempFile

30ms

Slot bgsave子进程中断后删除临时RDB文件的耗时。

LoadSlotRdb

100ms

Slot载入至(load)RDB的耗时。

SlotreplTargetcron

50ms

Slot子进程载入至(load)RDB到一个临时的数据库(DB)后,再将其移动至目标数据库(DB)的耗时。

FastCommand清单

说明

清单中列举了常用的命令,更多命令请在Commands | Redis官网中查看。ACL类中带有@fast标记的命令均属于FastCommand。command

ACCOUNT

ADMINAUTH

ASKING

AUTH

BKLIST

BZPOPMAX

BZPOPMIN

DBSIZE

DECR

DECRBY

DISCARD

ECHO

EXISTS

EXPIRE

EXPIREAT

Get

GETBIT

HDEL

HEXISTS

HGET

HINCRBY

HINCRBYFLOAT

HKCOUNTER

HKSWITCH

HLEN

HMGET

HMINCRBY

HMINCRBYFLOAT

HMSET

HSET

HSETNX

HSTRLEN

INCR

INCRBY

INCRBYFLOAT

LASTSAVE

LLEN

LPOP

LPUSH

LPUSHX

MGET

MOVE

MULTI

PERSIST

PEXPIRE

PEXPIREAT

PFADD

PING

PTTL

PUBLISH

READONLY

READWRITE

RENAMENX

RPOP

RPUSH

RPUSHX

SADD

SCARD

SELECT

SETNX

SISMEMBER

SMOVE

SPOP

SREM

STRLEN

SWAPDB

TIME

TOUCH

TTL

TYPE

UNLINK

UNWATCH

WATCH

XACK

XADD

XCLAIM

XDEL

XLEN

XSETID

XTRIM

ZADD

ZCARD

ZCOUNT

ZINCRBY

ZLEXCOUNT

ZPOPMAX

ZPOPMIN

ZRANK

ZREM

ZREVRANK

ZSCORE

ZSCOREAVG