SQL 查詢結果高速緩存可在資料庫記憶體中對查詢結果集和查詢碎片啟用顯式高速緩存。存儲在共享池(Share Pool)中的專用記憶體緩沖區
一.Result Set Caching 說明
Oracle 官網的說明,參考:
7.6 Managing the Server and ClientResult Caches
1.1 概述
SQL 查詢結果高速緩存可在資料庫記憶體中對查詢結果集和查詢碎片啟用顯式高速緩存。存儲在共享池(Share Pool)中的專用記憶體緩沖區可用于存儲和檢索高速緩存的結果。對查詢通路的資料庫對象中的資料進行修改後,存儲在該高速緩存中的查詢結果将失效。
雖然SQL 查詢高速緩存可用于任何查詢,但最适用于需要通路大量行卻僅傳回其中一少部分的語句。資料倉庫應用程式大多屬于這種情況。
注:
(1) RAC 配置中的每個節點都有一個專用的結果高速緩存。一個執行個體的高速緩存結果不能供另一個執行個體使用。但是,失效會對多個執行個體産生影響。要處理RAC 執行個體之間與SQL 查詢結果高速緩存相關的所有同步操作,需對每個執行個體使用專門的RCBG 程序。
(2) 通過并行查詢,可對整個結果進行高速緩存(在RAC 中,是在查詢協調程式執行個體上執行高速緩存的),但單個并行查詢程序無法使用高速緩存。
簡言之:
• 高速緩存查詢或查詢塊的結果以供将來重用。
• 可跨語句和會話使用高速緩存,除非該高速緩存已過時。
• 優點:
– 可擴充性
– 降低記憶體使用量
• 适用的語句:
– 通路多行
– 傳回少數行
1.2 設定SQL查詢結果高速緩存
查詢優化程式根據初始化參數檔案中RESULT_CACHE_MODE 參數的設定管理結果高速緩存機制。
可以使用此參數确定優化程式是否将查詢結果自動發送到結果高速緩存中。可以在系統和會話級别設定RESULT_CACHE_MODE 參數。
參數值可以是AUTO、MANUAL 和FORCE:
(1) 設定為AUTO 時,優化程式将根據重複的執行操作确定将哪些結果存儲在高速緩存中。
(2) 設定為MANUAL(預設值)時,必須使用RESULT_CACHE 提示指定在高速緩存中存儲特定結果。
(3) 設定為FORCE 時,所有結果都将存儲在高速緩存中。
注:對于AUTO 和FORCE 設定,如果語句中包含[NO_]RESULT_CACHE 提示,則該提示優先于參數設定。
1.3 管理SQL查詢結果高速緩存
可以改變初始化參數檔案中的多種參數設定,以管理資料庫的SQL 查詢結果高速緩存。
預設情況下,資料庫會為SGA 中共享池(Share Pool)内的結果高速緩存配置設定記憶體。配置設定給結果高速緩存的記憶體大小取決于SGA的記憶體大小以及記憶體管理系統。可以通過設定RESULT_CACHE_MAX_SIZE參數來更改配置設定給結果高速緩存的記憶體。如果将結果高速緩存的值設為0,則會禁用此結果高速緩存。此參數的值将四舍五入到不超過指定值的32 KB的最大倍數。如果四舍五入得到的值是0,則會禁用該功能。
使用RESULT_CACHE_MAX_RESULT參數可以指定任一結果可使用的最大高速緩存量。預設值為5%,但可指定1 到100 之間的任一百分比值。可在系統和會話級别上實施此參數。
使用RESULT_CACHE_REMOTE_EXPIRATION參數可以指定依賴于遠端資料庫對象的結果保持有效的時間(以分鐘為機關)。預設值為0,表示不會高速緩存使用遠端對象的結果。
将此參數設定為非零值可能會生成過時的資訊:例如,當結果使用的遠端表在遠端資料庫上發生了更改時。
使用以下初始化參數進行管理:
1.RESULT_CACHE_MAX_SIZE
– 此參數設定配置設定給結果高速緩存的記憶體。
– 如果将其值設為0,則會禁用結果高速緩存。
– 預設值取決于其它記憶體設定(memory_target的0.25% 或sga_target 的0.5% 或shared_pool_size 的1%)
– 不能大于共享池的75%
2.RESULT_CACHE_MAX_RESULT
– 設定單個結果的最大高速緩存
– 預設值為5%
3.RESULT_CACHE_REMOTE_EXPIRATION
– 根據遠端資料庫對象設定高速緩存結果的過期時間
– 預設值為0
1.4 使用Result_Cache 提示
如果要使用查詢結果高速緩存并将RESULT_CACHE_MODE初始化參數設定為MANUAL,則必須在查詢中顯式指定RESULT_CACHE 提示。這會在查詢的執行計劃中引入ResultCache運算符。執行查詢時,ResultCache 運算符将查找結果高速緩存,以檢查該查詢結果是否存在于高速緩存中。如果存在,則直接從高速緩存檢索該結果。如果高速緩存中不存在該查詢結果,則執行查詢。結果将以輸出形式傳回,也存儲在結果高速緩存中。
如果将RESULT_CACHE_MODE 初始化參數設定為AUTO 或FORCE,并且不希望将查詢結果存儲在結果高速緩存中,則必須在查詢中使用NO_RESULT_CACHE 提示。例如,如果在初始化參數檔案中RESULT_CACHE_MODE的值為FORCE,并且不希望對EMPLOYEES表使用結果高速緩存,則需要使用NO_RESULT_CACHE 提示。
注:應優先于參數設定使用[NO_]RESULT_CACHE提示。
1.5 使用DBMS_RESULT_CACHE 程式包
DBMS_RESULT_CACHE程式包提供了統計資訊、資訊和運算符,可以管理查詢結果高速緩存的記憶體配置設定。可以使用DBMS_RESULT_CACHE程式包執行多種操作,如檢視高速緩存的狀态(OPEN 或CLOSED)、檢索有關高速緩存記憶體使用量的統計資訊、重新整理高速緩存。
例如,要檢視記憶體配置設定統計資訊,請使用以下SQL 過程:
SQL> set serveroutput on
SQL> executedbms_result_cache.memory_report
DBMS_RESULT_CACHE 程式包用于:
(1) 管理查詢結果高速緩存的記憶體配置設定
(2) 檢視高速緩存的狀态:
SELECTDBMS_RESULT_CACHE.STATUS FROM DUAL;
(3)檢索有關高速緩存記憶體使用量的統計資訊:
EXECUTEDBMS_RESULT_CACHE.MEMORY_REPORT;
(4) 删除所有現有結果并清空高速緩存:
EXECUTEDBMS_RESULT_CACHE.FLUSH;
(5)使依賴于指定對象的高速緩存結果失效:
EXECDBMS_RESULT_CACHE.INVALIDATE('JFV','MYTAB');
1.6 檢視SQL結果高速緩存字典資訊
(G)V$RESULT_CACHE_STATISTICS : 列出各種高速緩存設定和記憶體使用量統計資訊
(G)V$RESULT_CACHE_MEMORY : 列出所有記憶體塊和相應的統計資訊
(G)V$RESULT_CACHE_OBJECTS: 列出所有對象(高速緩存結果和依賴性)及其屬性
(G)V$RESULT_CACHE_DEPENDENCY: 列出高速緩存結果之間的依賴性詳細資訊及依賴性
1.7 SQL 查詢結果高速緩存:注意事項
對于使用者編寫的基于函數的索引中使用的任何函數,必須使用DETERMINISTIC 關鍵字聲明該函數對任何指定的輸入參數值集始終傳回相同的輸出值。
(1) 隻有在高速緩存處于未使用狀态下才能運作清除操作,要進行重新整理,,需要禁用(關閉)高速緩存。
(2) 對于綁定變量,将使用變量值對高速緩存結果進行參數化。隻能找到相同變量值的高速緩存結果。也就是說,不同的值或綁定變量名稱将導緻高速緩存未命中。
注意事項如下:
1.對包含以下内容的查詢禁用結果高速緩存:
– 臨時表或字典表
– 不确定的PL/SQL 函數
– CURRVAL 和NEXTVAL 序列
– current_date、sysdate 和sys_guid 等SQL 函數
2.遠端資料庫上的DML/DDL 不會使高速緩存結果過期。
3.可高速緩存閃回查詢。
4.結果高速緩存不會自動釋放記憶體。
– 它将不斷增長,直到達到最大大小。
– DBMS_RESULT_CACHE.FLUSH 會清除記憶體。
5.綁定變量
– 将使用變量值對高速緩存結果進行參數化。
– 隻能找到相同變量值的高速緩存結果。
6.對于以下情況,不會生成高速緩存結果:
– 查詢是基于資料的非目前版本建構的(強制實施讀取一緻性)
– 目前會話在查詢的表中存在未完成的事務處理
1.8 OCI 客戶機查詢高速緩存
在Oracle Database11g 中,可以使用Oracle 調用接口(OCI) 客戶機查詢高速緩存對客戶機記憶體中的查詢結果集啟用高速緩存。 本條技術文章來源于網際網路,如果無意侵犯您的權益請點選此處回報版權投訴 本文系統來源:php中文網