慢请求引起的连接超时等问题是影响Redis服务质量的常见问题,云数据库Redis的慢日志系统能够帮助您快速找到慢请求问题发生的位置,定位发出请求的客户端IP,为彻底解决超时问题提供可靠的依据。

背景信息

Redis的慢日志会记录执行时间超过指定阈值的请求,慢日志分为数据节点慢日志和代理慢日志。

慢日志类型说明相关参数
数据节点慢日志
  • 数据节点慢日志中统计的命令执行时间仅包含命令在数据节点中的执行时间,不包含数据节点与代理或客户端的通信时间以及命令在单线程队列上的排队延迟等。
  • 数据节点慢日志的保留时间为72小时,无数量限制。
  • 由于Redis性能出色,通常情况下,数据节点慢日志的数量较少。
  • slowlog-log-slower-than:设置数据节点慢日志阈值,默认为20000微秒(即20毫秒)。
    说明 通常情况下您感知到的延迟实际会高于本参数设置的值,因为感知时间中包含了数据在客户端、代理、数据节点之间传输和处理所消耗的时间。
  • slowlog-max-len:设置最大慢日志条目数,默认为1024。
代理慢日志
  • 代理慢日志中统计的命令执行时间从代理向数据节点发出请求开始,到代理从数据节点收到相应的回复为止,包含了命令在数据节点中的执行时间、数据在网络中的传输时间以及命令的排队延迟等。
  • 代理慢日志的保留时间为72小时,无数量限制。
  • 由于代理慢日志反映的延迟与您在应用端感受到的延迟更相近,在排查Redis服务超时问题时,建议多关注此类日志。
rt_threshold_ms:设置代理慢日志的阈值,默认为500毫秒。建议将该阈值配置为与客户端超时时间近似的值,推荐为200毫秒到500毫秒。
参数设置方法请参见设置实例参数

慢日志查看方式

慢日志类型查看方式
数据节点慢日志
代理慢日志通过Redis管理控制台或调用OpenAPI查看:

操作步骤

Redis服务超时的原因通常比较复杂,很多情况下与慢请求相关。您可以按照下述步骤来排查超时问题。

  1. 当Redis服务出现超时问题,首先查看代理慢日志,详情请参见查询慢日志
    说明
    • 如果实例为标准架构,请跳转至步骤3分析数据节点慢日志。
    • 如果代理慢日志内容为空,您可以排查客户端与Redis实例间的网络状况。
  2. 定位最早的代理慢日志由哪条命令引发。
    说明 代理慢日志通常是因为数据节点中出现慢请求,引起命令堆积而导致的。

    本案例中,最早出现的慢日志是由一条KEYS命令生成的。右侧的IP地址即为使用这些命令的客户端IP地址。

    在代理慢日志中找到最早的慢日志
  3. 查看数据节点慢日志以确认代理慢日志中的哪些日志引起了超时问题。
    说明 通常情况下,在代理慢日志中最先产生慢日志的命令,也会在数据节点生成慢日志。数据节点的慢日志一般比代理节点慢日志少,这与二者对执行时间的定义以及慢日志阈值不同有关。

    本案例中,查看代理慢日志后,再对比数据节点慢日志,发现也存在KEYS命令产生的慢日志,且没有出现代理慢日志中的其它慢日志,说明真正引起超时即为KEYS命令产生的慢日志。

    在数据节点中查看慢日志
  4. 在代理慢日志中,根据上一步骤定位到的命令精确搜索,可找到使用这些命令的客户端IP,随后进行优化。
    在代理慢日志中精确搜索引起超时的命令