Query Cache

HologresV3.1版本起,支持查询缓存(Query Cache)功能。该功能支持将Query结果缓存至内存,后续遇到相同或者类似Query时,系统可优先从内存中匹配聚合结果,避免数据读取与计算开销,从而提升Query查询性能。Query Cache适用于高并发、重复查询的场景(如压测、BI报表等),能够显著优化查询效率并减少资源浪费。

注意事项

  • Hologres V3.1及以上版本支持Query Cache功能。

    说明

    若实例版本过低,请使用实例升级或加入实时数仓Hologres交流群申请升级实例。加入在线支持钉钉群请参见如何获取更多的在线支持?

  • Query Cache默认关闭,使用之前请先按照下方操作开启。

    -- 开启query cache功能,需要superuser执行,开启后新建连接生效
    ALTER DATABASE <database_name> SET hg_experimental_enable_query_cache=on;
  • Query Cache的结果是弱一致,如果缓存期间数据有写入,不保证结果正确。

  • RANDOM函数的Query结果不会被缓存。

使用Query Cache

Hologres中的内存大致分为三个部分:Query、缓存和Meta,其中缓存所占用的总内存约占实例总内存的30%。以单个Worker的内存分配为例,单个Worker的内存上限为64 GB,因此缓存分配的内存上限为30%,约为20 GB。Query Cache所使用的内存是缓存的一部分。

query_cache_percentage设置Query Cache分配内存

在使用Query Cache时,必须为其分配相应的内存资源,否则将无法充分发挥Query Cache的功能。

  • 单个Worker分配的内存 = 20 GB * query_cache_percentage * 0.01

  • 实例中总的分配内存 = 单个Worker分配的内存 * Worker个数

-- 示例分配的内存为20 GB*query_cache_percentage*0.01=400 MB
SELECT hg_admin_command('set_global_flag', 'query_cache_percentage=2');

设置单条Cache结果最大内存限制

单条Cache结果最大内存限制默认是10 MB,可以通过如下参数修改,但是上限是20 GB。

-- 调整单条Cache结果最大内存限制(默认10M)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_max_kb_per_item=10240;

调整Query Cache过期时间

Hologres中的缓存有淘汰策略,其中的算法包括内存上限、保留时间等,详细技术原理请参见存储技术揭秘,可以通过如下参数修改Query Cache过期时间。

  • Query Cache过期时间默认为60秒。

  • 设置过期时间的单位为秒。

-- 调整Query Cache过期时间,单位秒(默认60秒)
ALTER DATABASE <database_name> SET hg_experimental_query_cache_expire_time_sec=60;