常见Latency(时延)事件的处理建议

本文向您介绍常见Latency事件超过阈值时间的原因及处理建议,您可参考本文了解并处理对应的时延问题。

背景信息

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

时延洞察云数据库 Tair(兼容 Redis)提供的升级版时延统计功能,支持记录多达27个事件及所有命令的执行耗时,并支持保存最近3天内所有的时延统计数据。关于各事件的详细说明及对应阈值信息,请参见常见特殊事件附录

常见Latency事件

Latency事件

事件描述

常见超时原因

处理建议

EvictionCycle

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

可能性较多,需要更进一步分析EvictionDel、EvictionLazyFree事件的耗时。

  • 检查业务是否存在不必要的数据,并进行优化。

  • 扩容实例规格,尽量避免到达Maxmemory触发内存逐出。

EvictionDel

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

通常在逐出大Key时产生。

  • 尽量避免使用大Key。

  • 开启lazyfree-lazy-eviction参数,使用异步逐出模式。

  • 扩容实例规格,尽量避免到达Maxmemory触发内存逐出。

EvictionLazyFree

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

如果触发逐出时没有符合条件的Key,且后台线程正在释放内存(例如删除大Key)时,则需要等待至后台线程释放内存至Maxmemory以下或后台线程释放内存结束。

  • 根据业务需求,修改maxmemory-policy参数,调整内存逐出策略。

  • 扩容实例规格,尽量避免到达Maxmemory触发内存逐出。

ExpireCycle

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

通常在删除大Key时产生。

  • 尽量避免使用大Key。

  • 开启lazyfree-lazy-expire参数,使用异步逐出模式。

  • 在控制台主动执行清理过期数据操作。

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执行命令产生,例如执行GET命令,拷贝大量数据。

Fork

调用Fork操作的耗时。

通常在AOF Rewrite(重写)时产生。

如果是AOF Rewrite导致,且对数据持久化没有要求,建议关闭appendonly参数,关闭AOF持久化,关闭后,通常可以解决此类问题。

更多信息,请参见Redis Diagnosing latency issues

相关文档