結果緩存
靜態結果緩存 Vs 動態結果緩存
Feature | Static Result Cache | Dynamic Result Cache |
---|---|---|
Target Scenario | 對復雜視圖(通常是頂層視圖)的查詢 | 頻繁更新的大表(例如ACDOCA)上的聚合查詢 |
Query result | 非實時數據 | 實時數據 |
Scope | Target objects: SQL View, User-defined table function, Calculation view Aggregation types: SUM, MIN, MAX, COUNT. | Target objects: SQL Views on the aggregation of a single column table. Aggregation types: SUM, COUNT, AVG -完全支持 MIN, MAX- 部分支持 |
Cache Maintenance | 設定失效時間,到期后重新全量刷新 | 每次查詢執行時: 如果能夠識別更新的記錄,則緩存會增量更新這些記錄。 如果無法識別更新(由于多版本并發控制垃圾回收)則緩存將完全刷新。 |
Implicit view matching | 不支持 | Supported with hint / configuration. |
Adoption effort: defining cache | 通常基于CDS view或calculation view定義static result cache In the case of a CDS view without aggregation the result cache should be defined with expected aggregation type from target queries. | If the target aggregation is already defined as a view, dynamic result can be enabled on the existing view (explicit usage). Otherwise, a new view definition is required and dynamic result cache can be used with implicit view matching. |
Adoption effort: enable cache utilization | 使用hint訪問緩存數據 | Dynamic result cache is utilized by default even without a hint (but hint or configuration is required for enabling implicit view matching in the current release.) |
Static Result Cache
語法
--創建視圖時指定緩存配置
CREATE VIEW ... WITH CACHE RETENTION [<minutes>] ...
--修改視圖-調整緩存配置
ALTER VIEW ... ADD CACHE RETENTION [<minutes>] ...
--修改視圖-增加緩存配置
ALTER VIEW ... ALTER CACHE RETENTION [<minutes>] ...
--刪除緩存配置
ALTER VIEW ... DROP CACHE--刷新緩存數據
ALTER SYSTEM REFRESH RESULT CACHE <object_name>
ALTER SYSTEM REFRESH RESULT CACHE ENTRY <cache_id>
--清空緩存數據,下次訪問時重建
ALTER SYSTEM REMOVE RESULT CACHE ENTRY <cache_id>
緩存示例
--創建視圖
CREATE VIEW ZSV_ZAD141
AS
(SELECT * FROM "_SYS_BIC"."CNXXXXX141" )--配置視圖緩存
ALTER VIEW ZSV_ZAD141
ADD CACHE RETENTION 60;--配置視圖緩存(指定字段)
ALTER VIEW ZSV_ZAD141
ADD CACHE RETENTION 120
OF A, SUM(KF1), MIN(KF2), MAX(KF3); --配置視圖緩存(過濾器)
ALTER VIEW ZSV_ZAD141
ADD CACHE RETENTION 120
FILTER B > 3;
使用緩存
--查詢時使用緩存
SELECT * FROM ZSV_ZAD141 WITH HINT(RESULT_CACHE);
--查詢時跳過緩存
SELECT * FROM ZSV_ZAD141 WITH HINT(NO_RESULT_CACHE);--通過Explain Plan 檢查查詢是否使用了緩存
緩存監控
--M_HEAP_MEMORY
SELECT * FROM M_HEAP_MEMORY;
--靜態緩存信息
SELECT * from RESULT_CACHE
WHERE 1 = 1AND OBJECT_NAME = 'SIMPLE_VIEW';
--靜態緩存字段信息
ELECT * FROM RESULT_CACHE_COLUMNS
--檢查緩存刷新及訪問信息
SELECT * FROM M_RESULT_CACHE;
Dynamic Result Cache
語法
--啟用動態緩存
CREATE VIEW ... WITH DYNAMIC CACHE ...
ALTER VIEW ... ADD DYNAMIC CACHE ...
ALTER VIEW ... ALTER DYNAMIC CACHE ...
--禁用動態緩存
ALTER VIEW ... DROP DYNAMIC CACHE
--清除所有動態緩存
ALTER SYSTEM CLEAR DYNAMIC RESULT CACHE
--清除指定動態緩存
ALTER SYSTEM REMOVE DYNAMIC RESULT CACHE ENTRY <cache_id>
緩存配置
--創建視圖
CREATE VIEW ZSV_ZAD142
AS
(SELECT FKDAT_H_YM,VKORG,SUM(KWMENG) AS KWMENGFROM "SAPHANADB"."/BIC/AZOSD0022" GROUP BY FKDAT_H_YM,VKORG
);--配置視圖緩存
ALTER VIEW ZSV_ZAD142
ADD DYNAMIC CACHE;--配置視圖緩存(過濾器)
ALTER VIEW ZSV_ZAD142
ADD DYNAMIC CACHE
FILTER B > 3;
使用緩存
--不使用動態緩存
SELECT VKORG,KWMENG FROM ZSV_ZAD142 WITH HINT(NO_DYNAMIC_RESULT_CACHE)
--默認會使用動態緩存
SELECT VKORG,KWMENG FROM ZSV_ZAD142 WITH HINT(DYNAMIC_RESULT_CACHE)--啟用匹配:查詢底表時自動查找是否有匹配的動態緩存
SELECT VKORG,sum(KWMENG) FROM "SAPHANADB"."/BIC/AZOSD0022"
group by VKORG
WITH HINT(DYNAMIC_RESULT_CACHE_IMPLICIT_MATCH)
--禁用匹配:查詢底表時禁止自動查找動態緩存
SELECT VKORG,sum(KWMENG) FROM "SAPHANADB"."/BIC/AZOSD0022"
group by VKORG
HINT(NO_DYNAMIC_RESULT_CACHE_IMPLICIT_MATCH)--使用GET_DYNAMIC_RESULT_CACHE_IMPLICIT_MATCH_CANDIDATES_IN_STATEMENT檢查匹配
緩存監控
SELECT * FROM M_DYNAMIC_RESULT_CACHE;