本文向您介绍常见Latency事件超过阈值时间的原因及处理建议,您可参考本文了解并处理对应的时延问题。
背景信息
原生Redis在2.8.13版引入时延监控(Latency Monitoring)特性,基于事件机制帮助您发现和排查可能的时延问题。该功能仅支持获取最近160秒的数据,且只存取每秒内时延最高的事件。
时延洞察是云数据库 Tair(兼容 Redis)提供的升级版时延统计功能,支持记录多达27个事件及所有命令的执行耗时,并支持保存最近3天内所有的时延统计数据。关于各事件的详细说明及对应阈值信息,请参见常见特殊事件附录。
常见Latency事件
Latency事件 | 事件描述 | 常见超时原因 | 处理建议 |
EvictionCycle | 一次逐出周期的耗时,包含逐出数据的选择、删除操作,及后台线程等待的时间。 | 可能性较多,需要更进一步分析EvictionDel、EvictionLazyFree事件的耗时。 |
|
EvictionDel | 在逐出周期中删除Key(键)的耗时。 | 通常在逐出大Key时产生。 |
|
EvictionLazyFree | 在逐出周期中,等待后台线程释放内存的耗时。 | 如果触发逐出时没有符合条件的Key,且后台线程正在释放内存(例如删除大Key)时,则需要等待至后台线程释放内存至Maxmemory以下或后台线程释放内存结束。 |
|
ExpireCycle | 一次清理过期Key周期的耗时。 | 通常在删除大Key时产生。 |
|
ExpireDel | 在清理过期Key周期中,删除Key的耗时。 | 通常在删除大Key时产生。 | |
AofWrite | 写入AOF(AppendOnly File)的耗时。每次成功写入AOF文件后,会记录AofWrite事件以及AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync三者中的一种事件。 | 可能性较多,需要更进一步分析AofWriteAlone、AofWriteActiveChild、AofWritePendingFsync事件的耗时。 | 如果对数据持久化没有要求,建议可以关闭appendonly参数,关闭AOF持久化。 |
AofWriteAlone | 一次正常写入AOF文件的耗时。 | 数据写入量较大,或磁盘性能存在瓶颈。 | |
AofWriteActiveChild | 写入AOF文件的耗时,写入过程中存在其他子进程也在向磁盘写数据等情况。 | 写入AOF文件过程中,其他子进程也在向磁盘写数据。 | |
AofWritePendingFsync | 写入AOF文件的耗时,写入过程中存在后台进程正在执行fsync。 | 写入AOF文件过程中,存在后台进程正在执行fsync。 | |
Commands | 常规命令(未被标为fast)的耗时。 | 通常是特殊命令造成,例如执行KEYS命令,遍历所有数据。 | |
FastCommand | 被标为fast的命令(命令的时间复杂度为O(1)和O(log N))的耗时。 | 通常是对大Key执行命令产生,例如执行 | |
Fork | 调用Fork操作的耗时。 | 通常在AOF Rewrite(重写)时产生。 | 如果是AOF Rewrite导致,且对数据持久化没有要求,建议关闭appendonly参数,关闭AOF持久化,关闭后,通常可以解决此类问题。 |
更多信息,请参见Redis Diagnosing latency issues。