Block Cache 预热
本文介绍如何通过 Block Cache 预热 (Warmup) 来提前将远端数据载入 Block Cache。
功能介绍
在数据湖分析以及存算分离场景下,有一些场景对查询有一定的性能要求,比如 BI 报表,性能测试 POC 等。缓存预热功能可以提前将远端数据载入 Block Cache,避免查询时还需要从远端拉取数据,从而提供快速、稳定的查询性能。
Block Cache 预热和 Block Cache 特性的区别:
- Block Cache 是一个被动填充 cache 的过程,相当于在查询时通过同步或异步的方式把数据写入 cache,以便后续查询使用。
- Block Cache 预热是一个主动填充 cache 的过程,提前将想要查询的数据放到 cache 里,是基于 Block Cache 的扩展。
该特性从 3.3 版本开始支持。
适用场景
- 缓存盘的容量远大于待预热的数据量。如果磁盘容量小于待预热的数据量,可能达不到预期的预热效果。比如预热需要加载 100 GB 数据,而缓存盘只有 50 GB 空间,那么只能预热 50 GB,而且预热加载的后 50 GB 数据会淘汰前 50 GB,达不到预期的预热效果。
- 缓存盘的数据访问比较稳定。如果预热过程中突发大量数据访问,也会影响预热效果。比如预热需要加载 100 GB 数据,如果缓存盘有 200 GB 空间,虽然满足了条件 1,但如果预热过程中有大量新数据写入(150 GB),或者突然有另一个大冷查询需要加载 150 GB 数据,那么可能会将要预热的数据淘汰,达不到预期的预热效果。
使用方式
StarRocks 提供 CACHE SELECT 语法来实现 Block Cache 预热。使用 CACHE SELECT 之前,需要确保已经开启 Block Cache 特性。
CACHE SELECT 语法如下:
CACHE SELECT <column_name> [, ...]
FROM [<catalog_name>.][<db_name>.]<table_name> [WHERE <boolean_expression>]
[PROPERTIES("verbose"="true")]
参数说明:
column_name:需要缓存的列,可以用*来表示表中所有列。catalog_name:Catalog 名称,默认为 DEFAULT_CATALOG。如果已经通过 SET CATALOG 切换到 Catalog 下,也可以不填。db_name:数据库名称。如果已经切换到对应数据库下,也可以不填。table_name:表名称。boolean_expression: WHERE 中指定的过滤条件。PROPERTIES:当前仅支持设置verbose属性,用于返回详细的预热指标。
CACHE SELECT 是一个同步过程,且一次只能对一个表进行预热。执行成功后,会返回缓存预热相关的指标。