聊聊Oracle 11g的Result Cache(三)
下面我們來介紹一下Result Cache特性對應的引數、檢視和工具包。
6、Result Cache模式
在諸多的Result Cache相關引數中,Result Cache Mode是一個重要的開關引數。這個引數控制著當前Oracle是否使用客戶端和伺服器端Result Cache功能。
在之前的文章中,我們討論了Result Cache的特性。其中最大引起我們關注的就是Cache物件失效機制,只要查詢“依賴”的基礎資料表發生了變化,包括表結構、資料和授權關係,Cache快取物件就會失效。頻繁的Cache構建和失效、再次構建失效,要消耗很多CPU和記憶體空間。所以,從Oracle的角度看:應用程式SQL查詢主要對於只讀(Read-Only)物件或者變化較小(Read-Mostly)的資料庫物件。
初始化引數RESULT_CACHE_MODE用來控制Result Cache功能的開啟工作模式,預設是MANUAL。
SQL> show parameter result_cache_mode;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
result_cache_mode string MANUAL
MANUAL表示SQL語句只有在顯示的使用hint RESULT_CACHE的情況下,才會啟用Cache功能。與MANUAL對應的取值是FORCE,FORCE的含義是說,無論何時,都會對所有SQL啟用Result Cache功能,除非SQL中顯示出現了NO_RESULT_CACHE的hint標記。
明顯的,result_cache對所有SQL開啟是一個不合理的設計。所以,我們通常只要開啟預設值MANUAL就好了。
7、Result Cache相關檢視
Result Cache功能對應了一些檢視物件,用來輔助觀察Cache中的物件和資訊。
SQL> select * from dictionary where table_name like '%RESULT_CACHE%';
TABLE_NAME COMMENTS
------------------------------ --------------------------------------------------------------------------------
CLIENT_RESULT_CACHE_STATS$ Synonym for CRCSTATS_$
V$RESULT_CACHE_DEPENDENCY Synonym for V_$RESULT_CACHE_DEPENDENCY
V$RESULT_CACHE_MEMORY Synonym for V_$RESULT_CACHE_MEMORY
V$RESULT_CACHE_OBJECTS Synonym for V_$RESULT_CACHE_OBJECTS
V$RESULT_CACHE_STATISTICS Synonym for V_$RESULT_CACHE_STATISTICS
GV$RESULT_CACHE_DEPENDENCY Synonym for GV_$RESULT_CACHE_DEPENDENCY
GV$RESULT_CACHE_MEMORY Synonym for GV_$RESULT_CACHE_MEMORY
GV$RESULT_CACHE_OBJECTS Synonym for GV_$RESULT_CACHE_OBJECTS
GV$RESULT_CACHE_STATISTICS Synonym for GV_$RESULT_CACHE_STATISTICS
9 rows selected
檢視v$result_cache_objects可以檢視當前result cache中存在的物件資訊。
SQL> select id, type, status, name, cache_id from v$result_cache_objects;
ID TYPE STATUS NAME CACHE_ID
---------- ---------- --------- -------------------- --------------------------------------------------------------------------------
0 Dependency Published SCOTT.EMP SCOTT.EMP
1 Result Published select /*+result_cac 9xxbaav9pzwwx8c8muup7p5h5a
he*/* from emp
Oracle為每一個真正存在的Result Cache分配一個Cache ID編號。透過檢視v$result_cache_objects可以監控當前的物件狀態、資訊以及依賴關係。
V$result_cache_dependency是描述快取資料集合和依賴物件關係的檢視。Result Cache中,一個很大的問題就是如何讓快取及時反饋資料的變化。Oracle採用了物件依賴的機制,一旦物件發生了變化,依賴他的Cache就失效不可用。
SQL> select * from v$result_cache_dependency;
RESULT_ID DEPEND_ID OBJECT_NO
---------- ---------- ----------
1 0 75335
藉助v$result_cache_dependency檢視,我們可以看到物件之間的依賴關係,其中的ID是快取中的ID編號。
在記憶體SGA中,Oracle分配物件都是以Chunk為單位進行的。檢視v$result_cache_memory從記憶體分配角度,看物件資訊快取的情況。
SQL> select * from v$result_cache_memory;
ID CHUNK OFFSET FREE OBJECT_ID POSITION
---------- ---------- ---------- ---- ---------- ----------
0 0 0 NO 0 0
1 0 1 NO 1 0
2 0 2 YES
3 0 3 YES
4 0 4 YES
5 0 5 YES
(篇幅原因,有省略......)
最後是v$result_cache_statistics,計算統計了資料彙總資訊。
SQL> select * from v$result_cache_statistics;
ID NAME VALUE
---------- -------------------- ----------
1 Block Size (Bytes) 1024
2 Block Count Maximum 15744
3 Block Count Current 32
4 Result Size Maximum 787
(Blocks)
5 Create Count Success 1
6 Create Count Failure 0
7 Find Count 0
8 Invalidation Count 0
9 Delete Count Invalid 0
10 Delete Count Valid 0
11 Hash Chain Length 1
12 Find Copy Count 0
12 rows selected
8、DBMS_RESULT_CACHE工具包
Oracle為了提供result cache的管理,提供了dbms_result_cache工具包,其中的一些方法,可以幫助我們解決實際中的很多cache問題。
SQL> select dbms_result_cache.Status from dual;
STATUS
--------------------------------------------------------------------------------
ENABLED
諸多功能中,感覺清理cache和report cache資訊比較有用。
SQL> set serveroutput on size 10000;
SQL> exec dbms_result_cache.Memory_Report;
R e s u l t C a c h e M e m o r y R e p o r t
[Parameters]
Block Size = 1K bytes
Maximum Cache Size = 15744K bytes (15744 blocks)
Maximum Result Size = 787K bytes (787 blocks)
[Memory]
Total Memory = 151976 bytes [0.010% of the Shared Pool]
... Fixed Memory = 5352 bytes [0.000% of the Shared Pool]
... Dynamic Memory = 146624 bytes [0.009% of the Shared Pool]
....... verhead = 113856 bytes
....... Cache Memory = 32K bytes (32 blocks)
........... Unused Memory = 30 blocks
........... Used Memory = 2 blocks
............... Dependencies = 1 blocks (1 count)
............... Results = 1 blocks
................... SQL = 1 blocks (1 count)
PL/SQL procedure successfully completed
Memory Cache報告內容比較詳細,也比較清晰。
SQL> exec dbms_result_cache.Flush;
PL/SQL procedure successfully completed
SQL> select id, type, status, name, cache_id from v$result_cache_objects;
ID TYPE STATUS NAME CACHE_ID
---------- ---------- --------- -------------------- --------------------------------------------------------------------------------
9、Result Cache的一些限制
最後,我們說一下Result Cache的一些限制內容。
首先,臨時表和SYS/SYSTEM使用者下的資料表是不支援result cache的。
SQL> show user;
User is "SYS"
SQL> select /*+result_cache*/count(*) from t;
COUNT(*)
----------
83209
SQL> select id, type, status, name, cache_id from v$result_cache_objects;
ID TYPE STATUS NAME CACHE_ID
---------- ---------- --------- -------------------- --------------------------------------------------------------------------------
SQL> select /*+result_cache*/count(*) from scott.dept;
COUNT(*)
----------
4
SQL> select id, type, status, name, cache_id from v$result_cache_objects;
ID TYPE STATUS NAME CACHE_ID
---------- ---------- --------- -------------------- --------------------------------------------------------------------------------
0 Dependency Published SCOTT.DEPT SCOTT.DEPT
1 Result Published select /*+result_cac ahagshfx7u1wn348sd166sux6f
he*/count(*) from sc
ott.dept
非sys/system物件的資料表才能使用result cache特性。
其次,就是SQL語句中不能包括非確定性的語句和非確定性函式。比如,如果包括sequence物件的nextval和curval,或者sysdate這類的函式,就不能使用result cache。
下面我們具體介紹一下Result Cache的應用場景。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17086096/viewspace-2120732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 聊聊Oracle 11g的Result Cache(一)Oracle
- 聊聊Oracle 11g的Result Cache(二)Oracle
- 聊聊Oracle 11g的Result Cache(四)Oracle
- query result cache in oracle 11gOracle
- Oracle 11g新特性:Result CacheOracle
- oracle 11g result_cache分析Oracle
- ORACLE 11g Result cache使用指南Oracle
- Oracle Query Result CacheOracle
- Using Oracle Database 11g Release 2 Result Cache in an Oracle RAC EnvironmentOracleDatabase
- 淺談Oracle Result CacheOracle
- SQL Query Result Cache的使用和配置--Oracle 11G新特性SQLOracle
- Oracle 11g 的server結果快取result_cache_modeOracleServer快取
- Oracle 11.2.0.1 Result Cache 測試 - 12 DBMS_RESULT_CACHE管理包Oracle
- 11G result cache新特性的更多深入研究
- Oracle 11.2.0.1 Result Cache 測試 - 1Oracle
- Oracle 11.2.0.1 Result Cache 測試 - 5Oracle
- Oracle 11.2.0.1 Result Cache 測試 - 6Oracle
- Oracle 11.2.0.1 Result Cache 測試 - 7Oracle
- Oracle 11.2.0.1 Result Cache 測試 - 8Oracle
- Oracle 11.2.0.1 Result Cache 測試 - 9Oracle
- Oracle 11.2.0.1 Result Cache 測試 - 10Oracle
- oracle result cache 結果集快取的使用Oracle快取
- 11g result cache 結果快取記憶體快取記憶體
- 【11gR2新特性】result cache 的三種模式模式
- Oracle 11.2.0.1 Result Cache 測試 - 2 引數Oracle
- Oracle11g新特性:SQL Result Cache [zt]OracleSQL
- oracle11g RESULT_CACHE測試 (一)Oracle
- Oracle 11gR2 Result Cache特性文章收集Oracle
- Oracle11gr2新增表的RESULT CACHE屬性Oracle
- oracle 11g result 整理詳細版Oracle
- FLASH CACHE IN ORACLE 11GOracle
- Oracle 11.2.0.1 Result Cache 測試 - 13 常用檢視Oracle
- 11G result cache新特性的一些發現和個人見解
- Oracle 11g buffer cache的設定Oracle
- 聊聊jvm的Code CacheJVM
- Oracle 11.2.0.1 Result Cache 測試 - 3 引數及使用,限制Oracle
- 12c設定RESULT_CACHE_MODE=MANUAL發生'Result Cache:RC Latch'型別的Latch Free等待型別
- [ORACLE 11G]ROW CACHE LOCK 等待Oracle