结果集缓存(预览版)

适用于:SQL 分析终结点和 Microsoft Fabric 中的数据仓库

结果集缓存(预览版)是 Fabric 数据仓库和 Lakehouse SQL 分析终结点的内置性能优化,可提高读取延迟。

结果集缓存的工作原理是通过持久化适用的 SELECT T-SQL 查询的最终结果集,从而使后续运行命中缓存时只需处理最终结果集。 这可以绕过原始查询的复杂编译和数据处理,并更快地返回后续查询。

数据仓库方案通常涉及分析查询,这些查询处理大量数据以生成相对较小的结果。 例如, SELECT 查询如果包含多个连接并对数百万行数据执行读取和重新排序,可能会导致聚合结果仅有几行。 对于涉及报告或仪表板等任务的工作负载,这些任务往往会不断重复地触发相同的分析查询和相同的繁重计算,尽管最终结果仍保持不变。 结果集缓存可提高此情况和类似方案的性能。

重要

此功能目前为预览版

自动管理缓存

结果集缓存以透明方式工作。 启用后,缓存的创建和重用会以机会方式应用于查询。

结果集缓存适用于仓库表上的 T-SQL 查询、指向 OneLake 源的快捷方式,以及指向非 Azure 源的快捷方式。 自动处理缓存管理,并根据需要定期逐出缓存。

此外,随着数据的变化,通过使之前创建的缓存失效来确保结果一致性。

配置结果集缓存

结果集缓存在项目层面是可配置的。

启用后,可以在项级别或单个查询(如果需要)禁用它。

在预览期间,所有项的结果集缓存默认处于关闭状态。

项目级配置

使用 ALTER DATABASE SET T-SQL 命令为 Lakehouse 或仓库启用结果集缓存。 使用 Lakehouse 的 SQL 分析终结点连接和运行 T-SQL 查询。

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING ON;

可以在 sys.databases 中检查设置值,例如,查看 Fabric Warehouse 或 Lakehouse SQL 分析终结点中当前上下文的值:

SELECT name, is_result_set_caching_on 
FROM sys.databases
WHERE database_id = db_id();

若要禁用结果集缓存,请执行:

ALTER DATABASE <Fabric_item_name>
SET RESULT_SET_CACHING OFF;

查询级配置

在项上启用结果集缓存后,可以针对单个查询禁用该缓存。

这对于调试或 A/B 测试查询非常有用。 通过在以下末尾附加此提示 SELECT来禁用查询的结果集缓存:

OPTION ( USE HINT ('DISABLE_RESULT_SET_CACHE') );

检查结果集缓存使用情况

可以在两个位置检查结果集缓存使用情况:消息输出和 queryinsights.exec_requests_history 系统视图。

在查询的消息输出中(在 Fabric 查询编辑器或 SQL Server Management Studio 中可见),如果查询能够使用现有结果集缓存,则查询执行后将显示语句“已使用结果集缓存”。

查询结果的屏幕截图,其中显示了使用了结果集缓存。

queryinsights.exec_requests_history中,该列 result_cache_hit 显示一个值,该值指示每个查询执行的结果集缓存使用情况:

  • 2:查询使用结果集缓存(缓存命中
  • 1:结果集缓存由查询所创建
  • 0:查询不适用于结果集缓存创建或使用情况

例如:

SELECT result_cache_hit, command, *
FROM queryinsights.exec_requests_history
ORDER BY submit_time DESC;

Fabric 查询编辑器中的屏幕截图,其中显示了queryinsights.exec_requests_history视图上的查询。

系统有多种原因可以确定查询不符合结果集缓存的条件。 一些原因可能包括:

  • 缓存不再存在或因数据更改失效而失效,取消该缓存的重用资格。
  • 查询不是确定性的,并且不符合缓存创建的条件。
  • 查询不是 SELECT 语句。