You need to enable JavaScript to run this app.
导航

性能问题和解决方案

最近更新时间2023.07.13 11:46:01

首次发布时间2022.01.10 22:26:37

由于数据库使用不正确、业务规划不合理等情况都会产生热 Key 和大 Key,如果未能及时发现并处理热 Key 和大 Key,可能会导致数据库性能下降,严重影响业务。缓存数据库 Redis 版支持性能分析功能,能够帮助及时发现并分析数据库中的热 Key 和大 Key 详情,为您优化热 Key 和大 Key 提供数据参考。

判断标准

  • 大 Key
    大 Key 通常含有较大数据量或大量元素(如成员、列表数等)。缓存数据库 Redis 版的大 Key 判断标准如下:

    • 对于 String 类型的数据,若内存占用量大于 10KiB,则被认为是大 Key。
    • 对于非 String 类型的数据,若元素个数超过 5000 个,则被认为是大 Key。
  • 热 Key
    热 Key 的被访问次数通常显著高于其他 Key。缓存数据库 Redis 版的热 Key 判断标准如下:
    在查询时间范围内(如过去 1 天),对数据库内所有访问次数进行采样,当采样次数为整百数(如第100 次、200 次)时,若该采样所对应的 Key 的访问次数大于 3000,则被认为是热 Key。

产生的原因与带来的问题

Key 类型产生的原因带来的问题

大 Key

  • 业务规划不足,将 Redis 应用在不适合的场景下,或数据结构设计不合理,例如未对 Key 进行拆分,导致某些 Key 的 Value 过大或包含的元素过多。
  • 数据清理策略设置考虑不周,例如未能定期清理无效数据,或未错开大 Key 的缓存删除时间。
  • Redis 阻塞,访问变慢:由于 Redis 单线程的特性,如果某个大 Key 相关的操作 (如访问或删除大 Key)耗时较久,会严重影响后面的请求,甚至导致 Redis 阻塞,同时也会影响主从复制。
  • 内存占用不均,实例性能下降:在已启用分片集群的 Redis 实例中,存在大 Key 的节点会占用较多内存,集群实例中的内存无法实现均衡占用,易出现内存容量瓶颈,导致实例整体性能下降。
  • 影响其他服务或应用:大 Key 意味着 Redis 占用服务器的网络带宽也较多,除了 Redis 自身性能会变差,还会影响服务器上其他服务或应用。

热 Key

出现预期外的热点数据(如秒杀商品,热搜话题等),对单个 Key 的访问过于集中或访问量激增,容易导致热 Key 问题,常见于读多写少的场景。

  • 流量集中,消耗 CPU 和网络资源:对某一热点 Key 的请求流量过度集中,会消耗占用大量 CPU 和网络资源,出现实例负载不均衡数据倾斜问题,导致其他请求超时无法正常访问。
  • 请求超量,实例宕机业务雪崩:短时间内热 Key 访问量激增,超出 Redis 实例的处理上限,会导致实例宕机服务不可用,容易出现缓存击穿甚至雪崩,拖垮后端数据库服务。

解决方案

缓存数据库 Redis 版支持性能分析功能,能够帮助您在使用 Redis 过程中,实时查看数据库中的大 Key 和热 Key 详情,同时也支持查看大 Key 和热 Key 的历史详情。详细操作步骤,请参见大 Key 分析热 Key 分析