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

背景信息

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

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

时延洞察云数据库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

相关文档