You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ignite 2.13.0持久化下SELECT DISTINCT性能指数级下降求助

Ignite持久化下SELECT DISTINCT查询性能指数级下降问题

我们使用Ignite 2.13.0版本,正尝试推广使用Ignite持久化,但遇到异常问题:当缓存中对象数量线性增长时,使用索引的SELECT DISTINCT查询性能呈指数级下降。已准备测试用例复现该问题。

无持久化测试结果

  • 缓存含655,360个对象 → SELECT DISTINCT耗时:472s
  • 5倍数据量(3,276,750个对象)→ SELECT DISTINCT耗时:2,141ms
  • 10倍数据量(6,553,500个对象)→ SELECT DISTINCT耗时:4,354ms
  • 20倍数据量:因堆外内存不足无法运行(测试目标为持久化场景)

开启持久化测试结果

  • 缓存含655,360个对象 → SELECT DISTINCT耗时:561ms
  • 5倍数据量(3,276,750个对象)→ SELECT DISTINCT耗时:3,056ms
  • 10倍数据量(6,553,500个对象)→ SELECT DISTINCT耗时:6,381ms
  • 20倍数据量(13,107,000个对象)→ SELECT DISTINCT耗时:284,617ms

即使是65.5万条数据,基于索引的SELECT DISTINCT耗时0.5s也不算快,但10倍到20倍数据量之间性能呈指数级下降。执行计划显示查询已使用索引:

SELECT DISTINCT
    __Z0.DATAGROUPID AS __C0_0
FROM "cache".CONTRACTDTOSIMPLE __Z0
    /* "cache".CONTRACTDTOSIMPLE_DATAGROUPID_IDX */

已尝试调优所有持久化参数,确认索引已被使用,但10倍与20倍数据量的查询耗时相差约50倍,持久化对性能影响极大。请问遗漏了什么配置或优化点?

另外,尝试使用Calcite引擎,性能表现更差。


补充测试

在Azure D8ds v5实例上进行了更多测试,堆外内存设为4GB,堆内存设为4GB,测试结果如下:

数据量开启持久化WAL模式启用限流页面置换策略插入耗时SQL查询耗时分区SQL耗时分区扫描查询耗时
6.5MfalseN/AN/AN/A96.5s3.4s2.6s0.7s
6.5MtrueNONEfalseCLOCK192s5.6s3.9s1.1s
13MtrueNONEfalseCLOCK1063s197s188s94s
13MtrueNONEtrueCLOCK1047s196s102s14s
13MtrueNONEtrueSEGMENTED_LRU1042s211s205s14s
13MtrueLOG_ONLYfalseCLOCK1575s225s188s14s
13MtrueLOG_ONLYtrueCLOCK1586s185s102s15s
13MtrueLOG_ONLYtrueSEGMENTED_LRU1550s259s150s15s

内容的提问来源于stack exchange,提问作者Steve Hostettler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:06:05