11g新特性-查询缓存!

一、服务器端结果集缓存

1、配置服务器查询缓存

sys@ORCL> show parameter result_

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
result_cache_max_result              integer     5
result_cache_max_size                big integer 2624K
result_cache_mode                    string      MANUAL
result_cache_remote_expiration       integer     0
result_cache_max_result  :这是一个结果集在缓存中能够使用最大内存的百分比。默认为服务器结果缓存大小的5%。
result_cache_max_size     :这个参数为服务器结果缓存设置内存分配。
result_cache_mode           :默认值是MANUAL,意思是只有使用适当的查询提示或表注释时,数据库才会缓存查询结果。参数设置为FORCE的话,除非你特别指定了/*+ NO_RESULT_CACHE */提示,才不会缓存查询结果。
result_cache_remote_expiration  :默认情况下,任何包含远程对象的结果都不会被缓存。因此,默认值是0。可以为参数设定一个具体值,启用包含远程对象结果集进行缓存。


2、管理服务器结果缓存

从服务器结果缓存中清除查询缓存:

sys@ORCL> exec dbms_result_cache.Flush();

PL/SQL 过程已成功完成。

检查服务器结果缓存的状态:

sys@ORCL> select dbms_result_cache.Status() from dual;

DBMS_RESULT_CACHE.STATUS()
--------------------------------------------------------------------------------
ENABLED

查看oracle如何为结果缓存分配内存:

sys@ORCL> 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  = 2624K bytes (2624 blocks)
Maximum Result Size = 131K bytes (131 blocks)
[Memory]
Total Memory = 9440 bytes [0.003% of the Shared Pool]

... Fixed Memory = 9440 bytes [0.003% of the Shared Pool]
... Dynamic Memory = 0 bytes [0.000% of the Shared Pool]

PL/SQL 过程已成功完成。

如果你设置memory_target参数来使用自动内存管理,oracle将会把memory_target的0.25%分配给服务器结果缓存。
如果通过sga_target参数来使用自动内存管理,那么分配的值就是sga_target参数的0.5%。
如果设置shared_pool_size的值来进行手工内存管理,那么将会分配shared_pool_size参数值的1%。


让一个查询结果缓存:

u1@ORCL> select /*+ RESULT_CACHE */ * from emp;


执行计划
----------------------------------------------------------
Plan hash value: 3956160932

-------------------------------------------------------------------------------------------------
| Id  | Operation          | Name                       | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |                            |     3 |    18 |     3   (0)| 00:00:01 |
|   1 |  RESULT CACHE      | 6gmh2xmd86mbj974knznuvmy75 |       |       |            |          |
|   2 |   TABLE ACCESS FULL| EMP                        |     3 |    18 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------

Result Cache Information (identified by operation id):
------------------------------------------------------

   1 - column-count=2; dependencies=(U1.EMP); name="select /*+ RESULT_CACHE */ * from emp"


统计信息
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          0  consistent gets
          0  physical reads
          0  redo size
        537  bytes sent via SQL*Net to client
        416  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          3  rows processed

监控服务器结果缓存统计信息:

u1@ORCL> select * from v$result_cache_statistics;

        ID NAME                           VALUE
---------- ------------------------------ ----------
         1 Block Size (Bytes)             1024
         2 Block Count Maximum            2624
         3 Block Count Current            32
         4 Result Size Maximum (Blocks)   131
         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

已选择11行。

3、缓存SQL查询结果

当result_cache_mode参数设置为MANUAL时,数据库仅将使用查询提示或表注释的查询结果进行缓存。FORCE就是强制所有SQL查询结果都被数据库缓存起来。

要使用查询缓存可以通过查询提示:/*+ RESULT_CACHE */ 或者表注释:

u1@ORCL> select table_name,result_cache from user_tables where table_name='EMP';

TABLE_NAME                     RESULT_
------------------------------ -------
EMP                            DEFAULT

u1@ORCL> alter table emp result_cache(mode force);

表已更改。

u1@ORCL> select table_name,result_cache from user_tables where table_name='EMP';

TABLE_NAME                     RESULT_
------------------------------ -------
EMP                            FORCE

二、客户端结果集缓存

u1@ORCL> show parameter client_

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag              big integer 3000
client_result_cache_size             big integer 0


你可能感兴趣的:(11g新特性-查询缓存!)