对于常常要查的结果集,返回少量记录,server端是能够缓存的,结果集保存在共享池中,假设是绑定变量,绑定变量的值也要一样。
SQL> show parameter result_cache NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ client_result_cache_lag big integer 3000 client_result_cache_size big integer 0 result_cache_max_result integer 5 result_cache_max_size big integer 33440K result_cache_mode string manual result_cache_remote_expiration integer 0--result_cache_max_result 指定不论什么单个结果集能够使用result_cache_max_size的大小(单位为百分比),默觉得5,同意从1到100的值,超过这个限制的结果集会被双色至为无效。--result_cache_max_size 指定用来作为结果缓存的共享池内存的大小,假设被设置为0,表示这个特性被禁用。
--result_cache_mode 假设设置为MANUAL(这也是默认情况),仅仅有指定hint result_cache的时候才干使用结果缓存;当为force的时候,全部不包括hint no_result_cache的查询语句都会使用结果缓存,查询第二次即生效;当为auto时,在11g下执行相同的SQL第三次,缓存才起作用。
--result_cache_remote_expiration 缓存远程对象的有效期(单位为分钟),由于基于远程对象的结果集无法由于远程对象的变更而自己主动地变为无效,通常默觉得0,这意味着基于远程对象的查询结果的缓存是被禁止的。
--result_cache_max_result和result_cache_max_size是系统级别的设置,result_cache_mode和result_cache_remote_expiration能够在会话级别改动。
SQL> alter system set result_cache_mode=force
SQL> SELECT COUNT(1) 2 FROM GG_DISTRIBUTION W 3 WHERE W.DATA_AREA LIKE '03' || '%' 4 AND W.CREATE_DATE > TO_DATE('2013-01-01', 'yyyy-GG-dd'); 已用时间: 00: 00: 22.48 运行计划 ---------------------------------------------------------- Plan hash value: 3923546474 ------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 14 | 106K (1)| 00:24:46 | | | | 1 | SORT AGGREGATE | | 1 | 14 | | | | | | 2 | PARTITION RANGE ALL | | 2173K| 29M| 106K (1)| 00:24:46 | 1 | 2 | | 3 | PARTITION LIST ITERATOR| | 2173K| 29M| 106K (1)| 00:24:46 | KEY | KEY | |* 4 | TABLE ACCESS FULL | GG_DISTRIBUTION | 2173K| 29M| 106K (1)| 00:24:46 | 1 | 48 | ------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter("W"."CREATE_DATE">TO_DATE(' 2013-01-01 00:00:00', 'syyyy-GG-dd hh24:mi:ss') AND "W"."DATA_AREA" LIKE '03%') 统计信息 ---------------------------------------------------------- 0 recursive calls 0 db block gets 280123 consistent gets 263679 physical reads 0 redo size 339 bytes sent via SQL*Net to client 337 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL> / 已用时间: 00: 00: 00.11 运行计划 ---------------------------------------------------------- Plan hash value: 3923546474 ------------------------------------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop | ------------------------------------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 14 | 106K (1)| 00:24:46 | | || 1 | RESULT CACHE | 0mr1089p1wxv3919raqyvtwtsv | | | | | | | | 2 | SORT AGGREGATE | | 1 | 14 | | | | | | 3 | PARTITION RANGE ALL | | 2173K| 29M| 106K (1)| 00:24:46 | 1 | 2 | | 4 | PARTITION LIST ITERATOR| | 2173K| 29M| 106K (1)| 00:24:46 | KEY | KEY | |* 5 | TABLE ACCESS FULL | GG_DISTRIBUTION | 2173K| 29M| 106K (1)| 00:24:46 | 1 | 48 | ------------------------------------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - filter("W"."CREATE_DATE">TO_DATE(' 2013-01-01 00:00:00', 'syyyy-GG-dd hh24:mi:ss') AND "W"."DATA_AREA" LIKE '03%') Result Cache Information (identified by operation id): ----------------------------------------------------- 1 - column-count=1; dependencies=(LCAM_TEST.GG_DISTRIBUTION); attributes=(single-row); parameters=(nls); name="SELECT COUNT(1) FROM GG_DISTRIBUTION W WHERE W.DATA_AREA LIKE '03' || '%' AND W.CREATE_DATE > TO_DATE('2013-01-01', 'yyyy-" 统计信息 ---------------------------------------------------------- 1 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 339 bytes sent via SQL*Net to client 337 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
能够依据RESULT CACHE=0mr1089p1wxv3919raqyvtwtsv找到其缓存的信息。
SQL> select s.STATUS, s.CREATION_TIMESTAMP, s.BUILD_TIME, s.ROW_COUNT, s.SCAN_COUNT from v$result_cache_objects s where cache_id = '0mr1089p1wxv3919raqyvtwtsv'; STATUS CREATION_TIMES BUILD_TIME ROW_COUNT SCAN_COUNT --------- -------------- ---------- ---------- ---------- Published 20-6月 -14 700 1 26
结果缓存的限制:
当查询语句使用非确定性函数、序列号和暂时表的时候不能被缓存。
查询语句可能会造成数据不一致的时候。
引用到数据字典视图的查询语句不能缓存。
能够使用dbms_result_cache管理缓存。