ITPUB论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
更多
查看: 9938|回复: 21

[FAQ] Oracle 11g的Server Result Cache特征 [复制链接]

注册会员

Small Potatoes

精华贴数
0
技术积分
1955
社区积分
40
注册时间
2003-5-8
论坛徽章:
32
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:阿根廷
日期:2010-04-20 23:13:402010年世界杯参赛球队:葡萄牙
日期:2010-01-25 10:21:04生肖徽章2007版:蛇
日期:2009-08-10 18:06:54生肖徽章2007版:鸡
日期:2009-01-21 21:16:322008北京奥运纪念徽章:跳水
日期:2008-04-25 22:46:42生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章:龙
日期:2007-01-25 16:57:53生肖徽章:虎
日期:2007-01-25 16:57:33生肖徽章:鸡
日期:2006-09-26 17:35:06生肖徽章:虎
日期:2006-09-26 17:33:54ITPUB元老
日期:2006-09-18 16:22:11
发表于 2007-8-22 12:33:57 |显示全部楼层
--oracle 11g 结果集缓存特征
--日期:2007-08-22

--Oracle 11g的Server Result Cache特征可以重用相同的结果集,减少逻辑IO,提高系统性能.

--相关视图:
--result cache的统计信息.
V$RESULT_CACHE_STATISTICS

--result cache内存的使用情况.
V$RESULT_CACHE_MEMORY

--result cache里面的对象信息.
V$RESULT_CACHE_OBJECTS

--result cache对象的依赖信息.
V$RESULT_CACHE_DEPENDENCY

--对result_cache进行操作的包,具体参考文档.
DBMS_RESULT_CACHE

--相关参数:
[php]
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 4640K
result_cache_mode                    string      MANUAL
result_cache_remote_expiration       integer     0
[/php]
RESULT_CACHE_MAX_SIZE指定result cache的大小,设置为0时那ORACLE会禁用result cache.
RESULT_CACHE_MODE参数控制使用reslult cache的模式,它有两个指 MANUAL,FORCE.
如果设置的值为MANUAL,用户必须用reslut_cache 提示才可以缓存结果集.
如果设置为FORCE,ORACLE会缓冲所有的结果,除非用户用了no_result_cache提示.
RESULT_CACHE_MAX_RESULT指定单个result set可以占用RESULT_CACHE_MAX_SIZE的比例,默认为5%.
client_result*的两个参数用于指定客户端也开辟结果集缓存.
result_cache_remote_expiration指定缓存远程对象的过期时间

--测试过程:
由于result_cache_mode默认为manual,所以必须使用hint才能cache result set.
[php]
SQL> select /*+ result_cache */ owner,count(*) from t_compress group by owner;

OWNER                            COUNT(*)
------------------------------ ----------
NEWHC                                3371
TSMSYS                                  3
PUBLIC                              23101
OUTLN                                   9
TEST                                    4
SYSTEM                                511
ORACLE_OCM                              8
EXFSYS                                303
DBSNMP                                 55
XDB                                   784
SYS                                 29401
WMSYS                                 315
[/php]
--看下相关视图的内容:
[php]
SQL> select * from V$RESULT_CACHE_STATISTICS;

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

10 rows selected.
[/php]
--也可以使用dbms_result_cache.memory_report来查看内存分配情况
[php]
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  = 4640K bytes (4640 blocks)
Maximum Result Size = 232K bytes (232 blocks)
[Memory]
Total Memory = 103528 bytes [0.020% of the Shared Pool]
... Fixed Memory = 5132 bytes [0.001% of the Shared Pool]
... Dynamic Memory = 98396 bytes [0.019% of the Shared Pool]
....... Overhead = 65628 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.

SQL> select * from V$RESULT_CACHE_MEMORY;

        ID      CHUNK     OFFSET FRE  OBJECT_ID   POSITION
---------- ---------- ---------- --- ---------- ----------
         0          0          0 NO           0          0
         1          0          1 NO           1          0
         2          0          2 YES          0          0
         3          0          3 YES          0          0
         4          0          4 YES          0          0
         5          0          5 YES          0          0
         6          0          6 YES          0          0
         7          0          7 YES          0          0
         8          0          8 YES          0          0
         9          0          9 YES          0          0
        10          0         10 YES          0          0

        ID      CHUNK     OFFSET FRE  OBJECT_ID   POSITION
---------- ---------- ---------- --- ---------- ----------
        11          0         11 YES          0          0
        12          0         12 YES          0          0
        13          0         13 YES          0          0
        14          0         14 YES          0          0
        15          0         15 YES          0          0
        16          0         16 YES          0          0
        17          0         17 YES          0          0
        18          0         18 YES          0          0
        19          0         19 YES          0          0
        20          0         20 YES          0          0
        21          0         21 YES          0          0

        ID      CHUNK     OFFSET FRE  OBJECT_ID   POSITION
---------- ---------- ---------- --- ---------- ----------
        22          0         22 YES          0          0
        23          0         23 YES          0          0
        24          0         24 YES          0          0
        25          0         25 YES          0          0
        26          0         26 YES          0          0
        27          0         27 YES          0          0
        28          0         28 YES          0          0
        29          0         29 YES          0          0
        30          0         30 YES          0          0
        31          0         31 YES          0          0
--32个使用的块在那个chunk以及offset

SQL> select cache_id,name from v$result_cache_objects;

CACHE_ID                                NAME
--------------------------------------- ----------------------------------------------------------------------------------------------------
TEST.T_COMPRESS                         TEST.T_COMPRESS
5bg7fxv3404w32v0vqv0bhgccf              select /*+ result_cache */ owner,count(*) from t_compress group by owner

--这个result cache 对象信息.

SQL> select * from V$RESULT_CACHE_DEPENDENCY;

RESULT_ID  DEPEND_ID  OBJECT_NO
---------- ---------- ----------
         1          0      58797

--对象依赖信息.

--重新执行语句复用reselt set.
SQL> select /*+ result_cache */ owner,count(*) from t_compress group by owner;
12 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2456935480
--------------------------------------------------------------------------------
| Id  | Operation           | Name                       | Rows  | Bytes | Cost
(%CPU)| Time     |
--------------------------------------------------------------------------------

|   0 | SELECT STATEMENT    |                            |    12 |    72 |    79
   (8)| 00:00:01 |

|   1 |  RESULT CACHE       | 5bg7fxv3404w32v0vqv0bhgccf |       |       |
      |          |

|   2 |   HASH GROUP BY     |                            |    12 |    72 |    79
   (8)| 00:00:01 |

|   3 |    TABLE ACCESS FULL| T_COMPRESS                 | 57865 |   339K|    74
   (2)| 00:00:01 |

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

   1 - column-count=2; dependencies=(TEST.T_COMPRESS); parameters=(nls); name="s
elect /*+ result_cache */ owner,count(*) from t_compress group by owner"

Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          0  consistent gets
          0  physical reads
          0  redo size
         12  rows processed

--不需要再去读取数据,注意name是cache_id.

SQL> select owner,count(*) from t_compress group by owner;

12 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2456935480
--------------------------------------------------------------------------------
| Id  | Operation          | Name       | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |            |    12 |    72 |    79   (8)| 00:00:01
|   1 |  HASH GROUP BY     |            |    12 |    72 |    79   (8)| 00:00:01
|   2 |   TABLE ACCESS FULL| T_COMPRESS | 57865 |   339K|    74   (2)| 00:00:01
--------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
        258  consistent gets
         12  rows processed
         
--去掉hints没法使用cache result set.

--修改result_cache_mode为force
SQL> alter session set result_cache_mode=force;

Session altered.

SQL> select owner,count(*) from t_compress group by owner;

12 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 2456935480
--------------------------------------------------------------------------------
| Id  | Operation           | Name                       | Rows  | Bytes | Cost
(%CPU)| Time     |
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |                            |    12 |    72 |    79
   (8)| 00:00:01 |

|   1 |  RESULT CACHE       | 5bg7fxv3404w32v0vqv0bhgccf |       |       |
      |          |

|   2 |   HASH GROUP BY     |                            |    12 |    72 |    79
   (8)| 00:00:01 |

|   3 |    TABLE ACCESS FULL| T_COMPRESS                 | 57865 |   339K|    74
   (2)| 00:00:01 |

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

   1 - column-count=2; dependencies=(TEST.T_COMPRESS); parameters=(nls); name="s
elect owner,count(*) from t_compress group by owner"

Statistics
----------------------------------------------------------
          1  recursive calls
          0  db block gets
          0  consistent gets
          0  physical reads
          0  redo size
        678  bytes sent via SQL*Net to client
        420  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         12  rows processed
[/php]
--这种情况下才能使用result set.

注册会员

Small Potatoes

精华贴数
0
技术积分
1955
社区积分
40
注册时间
2003-5-8
论坛徽章:
32
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:阿根廷
日期:2010-04-20 23:13:402010年世界杯参赛球队:葡萄牙
日期:2010-01-25 10:21:04生肖徽章2007版:蛇
日期:2009-08-10 18:06:54生肖徽章2007版:鸡
日期:2009-01-21 21:16:322008北京奥运纪念徽章:跳水
日期:2008-04-25 22:46:42生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章:龙
日期:2007-01-25 16:57:53生肖徽章:虎
日期:2007-01-25 16:57:33生肖徽章:鸡
日期:2006-09-26 17:35:06生肖徽章:虎
日期:2006-09-26 17:33:54ITPUB元老
日期:2006-09-18 16:22:11
发表于 2007-8-22 12:35:24 |显示全部楼层
一个测试例子,欢迎大家指证.

使用道具 举报

版主

仙人抚我须 结发授长生

精华贴数
14
技术积分
47701
社区积分
5504
注册时间
2002-7-17
论坛徽章:
48
ITPUB元老
日期:2005-07-16 18:49:11授权会员
日期:2005-10-30 17:05:33ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44现任管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2011-11-01 16:19:412012新春纪念徽章
日期:2012-01-04 11:49:54
发表于 2007-8-22 13:28:15 |显示全部楼层
good job.

使用道具 举报

版主

开门

精华贴数
3
技术积分
20342
社区积分
10129
注册时间
2002-11-28
论坛徽章:
106
生肖徽章:龙
日期:2006-09-07 10:14:59生肖徽章:龙
日期:2007-09-26 17:12:35生肖徽章:龙
日期:2007-09-26 17:12:20生肖徽章:龙
日期:2007-09-26 17:10:45生肖徽章:龙
日期:2007-09-26 17:10:41生肖徽章:龙
日期:2007-09-26 17:09:21生肖徽章:龙
日期:2007-01-25 16:50:47生肖徽章:龙
日期:2007-01-25 16:50:41生肖徽章:龙
日期:2006-09-07 17:03:02生肖徽章:龙
日期:2006-09-07 17:00:52生肖徽章:龙
日期:2006-09-07 10:19:47生肖徽章:龙
日期:2007-09-26 17:12:36
发表于 2007-8-22 13:30:06 |显示全部楼层
建议授精

使用道具 举报

版主

何乡是吾乡,归期未有期

精华贴数
6
技术积分
13512
社区积分
4358
注册时间
2004-12-7
论坛徽章:
110
ITPUB元老
日期:2007-12-12 18:09:57八级虎吧徽章
日期:2008-12-08 16:10:56生肖徽章2007版:狗
日期:2009-01-15 19:45:13生肖徽章2007版:龙
日期:2009-09-16 13:11:59祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:蛇
日期:2009-11-13 10:54:512010数据库技术大会纪念徽章
日期:2010-05-13 10:04:282011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56
发表于 2007-8-22 13:38:10 |显示全部楼层
呵呵,刚看到。早知道我刚这篇就不写了

http://www.ningoo.net/2007/08/22 ... r_result_cache2.htm

使用道具 举报

注册会员

永远的DBA

精华贴数
0
技术积分
4752
社区积分
205
注册时间
2002-6-13
论坛徽章:
6
ITPUB元老
日期:2005-09-18 11:00:10授权会员
日期:2005-10-30 17:05:33数据库板块每日发贴之星
日期:2005-12-21 01:01:31会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2007-8-22 13:45:37 |显示全部楼层
支持,顶!注意排版,ningoo那个看起来舒服多了,

使用道具 举报

注册会员

永远的DBA

精华贴数
0
技术积分
4752
社区积分
205
注册时间
2002-6-13
论坛徽章:
6
ITPUB元老
日期:2005-09-18 11:00:10授权会员
日期:2005-10-30 17:05:33数据库板块每日发贴之星
日期:2005-12-21 01:01:31会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2007-8-22 13:50:29 |显示全部楼层
最初由 NinGoo 发布
[B]呵呵,刚看到。早知道我刚这篇就不写了

http://www.ningoo.net/2007/08/22 ... r_result_cache2.htm [/B]

[PHP]
result_cache_mode,如果取值为auto,则优化器会自动判断是否将查询结果缓存;
.............
[/PHP]

有疑问,文档上并没有说这个auto取值。

使用道具 举报

版主

何乡是吾乡,归期未有期

精华贴数
6
技术积分
13512
社区积分
4358
注册时间
2004-12-7
论坛徽章:
110
ITPUB元老
日期:2007-12-12 18:09:57八级虎吧徽章
日期:2008-12-08 16:10:56生肖徽章2007版:狗
日期:2009-01-15 19:45:13生肖徽章2007版:龙
日期:2009-09-16 13:11:59祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:蛇
日期:2009-11-13 10:54:512010数据库技术大会纪念徽章
日期:2010-05-13 10:04:282011新春纪念徽章
日期:2011-01-25 15:41:012011新春纪念徽章
日期:2011-01-25 15:41:502011新春纪念徽章
日期:2011-01-25 15:42:152011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56
发表于 2007-8-22 13:53:03 |显示全部楼层
最初由 teddyboy 发布
[B]
[PHP]
result_cache_mode,如果取值为auto,则优化器会自动判断是否将查询结果缓存;
.............
[/PHP]

有疑问,文档上并没有说这个auto取值。 [/B]


这个我估计是文档有bug

请看

SQL> alter session set result_cache_mode=a;
ERROR:
ORA-00096: invalid value A for parameter result_cache_mode, must be from among FORCE, MANUAL, AUTO

使用道具 举报

注册会员

永远的DBA

精华贴数
0
技术积分
4752
社区积分
205
注册时间
2002-6-13
论坛徽章:
6
ITPUB元老
日期:2005-09-18 11:00:10授权会员
日期:2005-10-30 17:05:33数据库板块每日发贴之星
日期:2005-12-21 01:01:31会员2006贡献徽章
日期:2006-04-17 13:46:34会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44
发表于 2007-8-22 13:58:24 |显示全部楼层
最初由 NinGoo 发布
[B]

这个我估计是文档有bug

请看

SQL> alter session set result_cache_mode=a;
ERROR:
ORA-00096: invalid value A for parameter result_cache_mode, must be from among FORCE, MANUAL, AUTO [/B]


哦 我没有折腾 只是浏览了一遍新特性的文档。

使用道具 举报

注册会员

Small Potatoes

精华贴数
0
技术积分
1955
社区积分
40
注册时间
2003-5-8
论坛徽章:
32
授权会员
日期:2005-10-30 17:05:332010年世界杯参赛球队:阿根廷
日期:2010-04-20 23:13:402010年世界杯参赛球队:葡萄牙
日期:2010-01-25 10:21:04生肖徽章2007版:蛇
日期:2009-08-10 18:06:54生肖徽章2007版:鸡
日期:2009-01-21 21:16:322008北京奥运纪念徽章:跳水
日期:2008-04-25 22:46:42生肖徽章2007版:鸡
日期:2008-01-02 17:35:53生肖徽章:龙
日期:2007-01-25 16:57:53生肖徽章:虎
日期:2007-01-25 16:57:33生肖徽章:鸡
日期:2006-09-26 17:35:06生肖徽章:虎
日期:2006-09-26 17:33:54ITPUB元老
日期:2006-09-18 16:22:11
发表于 2007-8-22 15:34:19 |显示全部楼层
最初由 teddyboy 发布
[B]支持,顶!注意排版,ningoo那个看起来舒服多了, [/B]

改了

使用道具 举报

相关内容推荐
您需要登录后才可以回帖 登录 | 注册

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 邮箱 虎吧 老博客 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
回顶部