Redis FT.SEARCH命令耗时随时间增长问题排查求助
Redis FT.SEARCH性能随时间持续退化问题求助
环境与作业背景
- Redis存储约120万条JSON文档,分为两个命名空间:
com.test.api.redis.model.document.PRedis:*(约70万条)、com.test.api.redis.model.document.SRedis:*(约55万条) - 每小时针对每个命名空间执行一次作业,完成三项操作:更新所有JSON键、创建新键、删除未更新的键;两个作业间隔30分钟,单次作业耗时约2分钟
慢查询与性能退化现象
作业中用于定位未更新键的FT.SEARCH命令如下:
FT.SEARCH com.test.api.redis.model.document.PRedisIdx ( -@jobId:[1.731591900002E12 1.731591900002E12]) NOCONTENT LIMIT 0 10000 DIALECT 1
性能随时间持续退化:
- Redis启动后首次执行该命令耗时仅30ms
- 1天后耗时增至1秒,1周后达到10秒左右
- 重启Redis Docker容器后耗时恢复正常,但后续会再次逐渐变长
- 该问题在
redis/redis-stack-server:7.2.0-v13和7.4.0-v1两个版本镜像中均出现
已尝试的无效优化操作
- 执行内存清理
- 主动触发碎片整理
- 终止闲置客户端
- 将作业间隔延长至5小时
补充细节
- 作业执行期间Redis CPU使用率达99%,作业间隙则低于1%
jobId为作业执行时的当前毫秒时间,通过Redis OM Spring在实体类中定义:
@Indexed private Long jobId;
对应索引中的属性配置:
18) 1) "identifier" 2) "$.jobId" 3) "attribute" 4) "jobId" 5) "type" 6) "NUMERIC"
问题
该Redis性能持续退化的原因是什么?
内容的提问来源于stack exchange,提问作者xMilos
相关产品推荐
相关产品推荐

