Query Cache
StarRocks 提供的 Query Cache 特性,可以帮助您极大地提升聚合查询的性能。开启 Query Cache 后,每次处理聚合查询时,StarRocks 都会将本地聚合的中间结果缓存于内存中。这样,后续收到相同或类似的聚合查询时,StarRocks 就能够直接从 Query Cache 获取匹配的聚合结果,而无需从磁盘读取数据并进行计算,大大节省查询的时间和资源成本,并提升查询的可扩展性。在大量用户同时对复杂的大数据集执行相同或类似查询的高并发场景下,Query Cache 的优势尤为明显。
该特性从 2.5 版本开始在存算一体集群中支持,并从 3.4 版本开始在存算分离集群中支持。
在 2.5 版本,Query Cache 仅支持宽表模型下的单表聚合查询。自 3.0 版本起,除宽表模型下的单表聚合查询外,Query Cache 还支持星型模型下简单多表 JOIN 的聚合查询。
应用场景
Query Cache 可以生效的典型应用场景有如下特点:
- 查询多为宽表模型下的单表聚合查询或星型模型下简单多表 JOIN 的聚合查询。
- 聚合查询以非 GROUP BY 聚合和低基数 GROUP BY 聚合为主。
- 查询的数据以按时间分区追加的形式导入,并且在不同时间分区上的访问表现出冷热性。
目前 Query Cache 支持的查询需要满足下面条件:
-
查询的执行引擎为 Pipeline。
说明
除 Pipeline 以外的其他执行引擎不支持 Query Cache。
-
查询的表为原生 OLAP 表(自 2.5 版本起支持)或存算分离表(自 3.0 版本起支持)。不支持外表上的查询。查询计划中,实际访问的是同步物化视图时,Query Cache 也可以生效。异步物化视图暂不支持。
-
查询为单表聚合查询或多表 JOIN 的聚合查询。
说明
- Query Cache 支持 Broadcast Join 和 Bucket Shuffle Join。
- Query Cache 支持含 Join 算子的两种树形:先聚合后 Join 和 先 Join 后聚合。在先聚合后 Join 的树形结构中,不支持 Shuffle Join。在先 Join 后聚合的树形结构中,不支持 Hash Join。
-
查询不包含
rand、random、uuid和sleep等不确定性 (Nondeterminstic) 函数。
Query Cache 支持全部数据分区策略,包括 Unpartitioned、Multi-Column Partitioned 和 Single-Column Partitioned。