对于常常要查的结果集,返回少量记录,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管理缓存。