文档

结果集缓存

更新时间:
重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

AnalyticDB for MySQL提供结果集缓存来减少不必要的计算,达到降低负载,加速查询的目的。本文介绍AnalyticDB for MySQL结果集缓存的限制和使用方式。

前提条件

AnalyticDB for MySQL集群的内核版本为3.2.0及以上版本。

说明 如何查看集群内核版本,请参见如何查看实例版本信息。如需升级内核版本,请联系技术支持。

功能说明

结果集缓存是指在AnalyticDB for MySQL接入层的本地存储空间中对首次查询的结果进行缓存,等再次提交相同的查询时,如果查询关联的库表数据没有更新,则从缓存的结果集中查询结果并反馈至客户端,不再重新计算。

适用场景

  • 数据写入时段固定或集中。大部分时间数据保持不变, 无更新或写入。

  • 查询存在一定重复率,即在一段时间内请求端发起多次相同查询。

注意事项

由于当前多主架构设计的限制,底层库表数据发生更新后,数据更新需要经过存储层同步到接入层,并在接入层内部节点间同步。因此数据更新信息的传递会有最多10秒的延迟, 导致结果集缓存不能保证强一致性, 但可以保证最终一致性, 即在数据更新10秒后, 相关缓存必定被淘汰, 再次缓存就是最新数据。

使用限制

满足以下所有条件的查询才能使用结果集缓存。

  • 本次的查询语句在语法层面与之前被缓存的查询语句完全一致。

  • 查询关联的表数据未发生过新增、删除或更新等变更。

  • 查询未使用非确定性函数(Non-Deterministic Function),如NOW,CURRENT_TIMESTAMP等。

  • 查询未使用外部数据源及内部系统表。

  • 查询使用的表在黑白名单准入限制开启时符合对应的准入限制。

  • 查询结果集大小未超过数据量的阈值(默认最多缓存10000行,超过设置的阈值,查询结果集会在生成过程中被撤销)。

开启结果集缓存

开启结果集缓存有以下两种方式:

  • 通过Hint指定某一查询开启结果集缓存。

    /*+result_cache=true*/ SELECT * FROM tpcds.catalog_returns WHERE cr_item_sk < 100;
  • 通过修改集群级别配置项, 指定所有查询开启结果集缓存。

    SET ADB_CONFIG RESULT_CACHE_APPLY_ALL=true;
    警告

    开启集群级别会对所有请求尝试缓存结果集,在高并发场景下会增加负载。建议集群级别开启后, 再配置黑白名单准入限制来降低额外的缓存开销。详情请参见配置黑白名单准入限制

黑白名单准入限制

在集群级别开启结果集缓存会对所有查询生效,会增加较多额外负载,而指定单个查询开启的方式又过于精细,会引入较多人为修改的成本。建议在集群级别开启结果集缓存时,通过黑白名单准入限制定义哪些表的查询使用结果集缓存。

SET ADB_CONFIG RESULT_CACHE_LIST_CONSTRAINT_MODE=[whitelist | blacklist | disable];

参数说明:

  • disable(默认值):不使用黑白名单准入限制。

  • whitelist:使用白名单准入限制。

  • blacklist:使用黑名单准入限制。

当开启黑白名单准入限制时,可以调整表级别的缓存属性RESULT_CACHE来实现不同的缓存准入限制。

ALTER TABLE <table_name> RESULT_CACHE=[default | enable | disable];
  • 当未开启黑名单或白名单准入限制时,则表缓存属性RESULT_CACHE无意义。符合使用限制的所有查询均可使用结果集缓存。

  • 当开启黑名单准入限制时,表缓存属性名RESULT_CACHE设置为default或enable,包含该表的查询均允许使用结果集缓存。而值为disable时,包含该表的查询均不允许使用结果集缓存。

  • 当开启白名单准入限制时,只有表缓存属性名RESULT_CACHE为enable,包含该表的查询才允许使用结果集缓存。而值为default或disable时,包含该表的查询均不允许使用结果集缓存。

您可以执行以下SQL语句查看配置了黑白名单准入的表。

SELECT * FROM INFORMATION_SCHEMA.RESULT_CACHE_LIST_CONSTRAINT;

结果集缓存大小限制

结果集缓存的数据量受到行数RESULT_CACHE_MAX_ROW_COUNT的限制。若行数超过阈值,结果集将缓存失败。

配置结果集缓存的行数阈值。默认值为10000。

SET ADB_CONFIG RESULT_CACHE_MAX_ROW_COUNT = 10000;

查看所有结果集缓存

您可以执行以下SQL语句查看所有的结果集缓存数据。

SELECT * FROM INFORMATION_SCHEMA.RESULT_CACHE_STATUS;

结果集缓存淘汰策略

结果集缓存不需要您手动管理,AnalyticDB for MySQL会根据淘汰策略自动删除过期的结果集缓存。AnalyticDB for MySQL支持两种淘汰策略,超时淘汰和最大缓存数淘汰。满足任意一种淘汰策略,缓存就会被删除。

  • 超时淘汰策略指超时未被访问的结果集缓存会被自动删除。超过时间由RESULT_CACHE_EXPIRATION_TIME指定。默认值为86400,单位为秒(s)。

    配置超时淘汰策略。

    SET ADB_CONFIG RESULT_CACHE_EXPIRATION_TIME = 86400;
  • 最大缓存数淘汰策略指在单个接入节点内超过最大缓存数,最久未被访问的缓存会被自动删除。单个接入节点最大缓存数由RESULT_CACHE_MAX_CACHE_COUNT指定。默认值为100。

    配置最大缓存数淘汰策略。

    SET ADB_CONFIG RESULT_CACHE_MAX_CACHE_COUNT = 100;

  • 本页导读 (1)