日期:2014-05-16  浏览次数:20524 次

[每日一题] 11gOCP 1z0-053 :2013-10-12 RESULT_CACHE在哪个池?.............................44

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12657479



正确答案:B

 

Oracle 11g 新特性:Result Cache ,它是存在SHARED POOL中,作用SQL提高性能,如果结果缓存起来,下次查询直接就返回数据,无须再解析、执行SQL了。大大提高了性能。但缺点是需要在共享池留一块空间出来。

     结果集缓存是Oracle 11g新引入的功能,除了可以在服务器端缓存结果之外,还可以在客户端缓存结果。服务器端的Result Cache Memory由两部分组成。

  ■SQL Query Result Cache:存储SQL查询的结果集。

  ■PL/SQL Function Result Cache:用于存储过程PL/SQL函数的结果集。

 

  Oracle通过一个新引入初始化参数来控制该Cache的大小(result_cache_max_size)

sys@OCM> show parameter result

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 3360K
result_cache_mode                    string      MANUAL
result_cache_remote_expiration       integer     0

如果result_cache_max_size=0则表示禁用该特性。参数result_cache_max_result则控制单个缓存结果可以占总的Server Result Cache大小的百分比。

上面显示的参数中result_cache_mode用于控制Server Result Cache的模式,该参数有3个可选设置。

● result_cache_mode=AUTO:则优化器自动判断是否将查询结果缓存。

●result_cache_mode=MANUAL:则需要通过查询提示来告诉优化器是否缓存结果。

●result_cache_mode=FORCE:则尽可能地缓存查询结果,通过提示:no_result_cache可以拒绝缓存。

Ok,下面我们来测Result Cache的性能。

(1)当前我的result_cache_mode为manual,如上所说result_cache_mode=MANUAL:则需要通过查询提示来告诉优化器是否缓存结果。

sys@OCM> show parameter result

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 3360K
result_cache_mode                    string      MANUAL
result_cache_remote_expiration       integer     0

(2)在没有缓存结果的况情下的测试

 gyj@OCM> set autot traceonly;
gyj@OCM> select  count(*) from t1;


Execution Plan
----------------------
Plan hash value: 3724264953

-------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS FULL| T1   |     2 |     3   (0)| 00:00:01 |
-------------------------------


Statistics
----------------------
          1  recursive calls
          0  db block gets
          6  consistent gets
          0  physical reads
          0  redo size
        526  bytes sent via SQL*Net to client
        520  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
1	rows processed

 gyj@OCM> set autot traceonly;
gyj@OCM> select  count(*) from t1;


Execution Plan
----------------------
Plan hash value: 3724264953

-------------------------------
| Id  | Operation          | Name | Rows  | Cost (%CPU)| Time     |
-------------------------------
|   0 | SELECT STATEMENT   |      |     1 |     3   (0)| 00:00:01 |
|   1 |  SORT AGGREGATE    |      |     1 |            |          |
|   2 |   TABLE ACCESS