启用了高速缓存时,会对每个查询进行评估以确定其是否符合高速缓存命中条件。
高速缓存命中是指 Oracle Analytics Cloud 能够使用高速缓存来应答查询,并且根本不访问数据库。Oracle Analytics Cloud 可以在相同或更高的聚合级别使用查询高速缓存来应答查询。
确定是否命中高速缓存的因素有许多。下表介绍这些因素。
| 因素或规则 | 说明 |
|---|---|
|
|
高速缓存查询中必须存在新查询的 此规则描述命中高速缓存的最低要求,但符合此规则并不保证实现高速缓存命中。此表中列出的其他规则也适用。 |
|
|
Oracle Analytics Cloud 可以计算高速缓存结果中的表达式来应答新查询,但所有列必须在高速缓存结果中。例如,以下查询: SELECT product, month, averageprice FROM sales WHERE year = 2000 命中以下查询的高速缓存: SELECT product, month, dollars, unitsales FROM sales WHERE year = 2000 因为 |
|
|
要使查询符合高速缓存命中条件, 如果一个
此外, SELECT employeename
FROM employee, geography
WHERE region in ('EAST', 'WEST')
对于前面列表中的植入查询,不会出现高速缓存命中,因为 REGION 不在投影列表中。 |
|
仅限维的查询必须是完全匹配 |
如果查询是仅限维的查询,这意味着查询中不包含事实或度量,则仅高速缓存查询的投影列的完全匹配会命中查询。此行为可防止在一个维表有多个逻辑源时出现正错 (false positive)。 |
|
含特殊函数的查询必须是完全匹配 |
包含特殊函数(例如时间序列函数( |
|
逻辑表集必须匹配 |
要符合高速缓存命中条件,所有传入查询必须与高速缓存条目具有相同的逻辑表集。此规则可避免出现假的高速缓存命中。例如, |
|
会话变量值必须匹配(包括安全会话变量) |
如果逻辑 SQL 或物理 SQL 语句引用任何会话变量,则会话变量值必须匹配。否则,不会命中高速缓存。 此外,与安全相关的会话变量值必须匹配在语义模型中定义的安全会话变量值,即使逻辑 SQL 语句本身不引用会话变量也是如此。请参见在使用行级别数据库安全性时确保高速缓存结果正确。 |
|
等效的联接条件 |
执行新查询请求生成的联接逻辑表必须与高速缓存结果(或部分高速缓存结果)相同,才能符合高速缓存命中条件。 |
|
|
如果高速缓存查询使用 |
|
查询必须包含兼容的聚合级别 |
请求聚合级别信息的查询可以在较低聚合级别使用高速缓存结果。例如,以下查询请求在供应商、区域和城市级别销售的数量: SELECT supplier, region, city, qtysold FROM suppliercity 以下查询请求在城市级别销售的数量: SELECT city, qtysold FROM suppliercity 执行第二个查询时会命中第一个查询的高速缓存。 |
|
有限制性的其他聚合 |
例如,如果高速缓存含列 |
|
|
如果查询按不包含在 select 列表中的列排序,则结果为高速缓存未命中。 |
|
诊断高速缓存命中行为 |
为了更好地评估高速缓存命中行为,应将 ENABLE_CACHE_DIAGNOSTICS 会话变量设置为 4,如下例所示: ENABLE_CACHE_DIAGNOSTICS=4 |