ITPUB??ì3
2010数据库技术大会
ITPUB论坛 » Oracle新技术/11g » Oracle 11g的Server Result Cache特征

您有 2 条公共消息
  • 来自: 公共消息 标题: 新开"PLM/PDM产品 ... 内容: 讨论范围包括:产品研发管理(PDM),产品生命周期管理(PLM),工艺/ ...
  • 来自: 公共消息 标题: 2010数据库技术大 ... 内容: “2010数据库技术大会”将于2010年4月2日~4月3日,在北京歌华开元大酒 ...

    标题: [FAQ] Oracle 11g的Server Result Cache特征
    离线 小人物
    Small Potatoes


    精华贴数 0
    个人空间 0
    技术积分 1953 (1023)
    社区积分 40 (6629)
    注册日期 2003-5-8
    论坛徽章:30
    ITPUB元老会员2006贡献徽章授权会员2010年世界杯参赛球队:葡萄牙生肖徽章2007版:蛇生肖徽章2007版:鸡
    2008北京奥运纪念徽章:跳水生肖徽章2007版:鸡生肖徽章:龙生肖徽章:虎生肖徽章:鸡生肖徽章:虎

    发表于 2007-8-22 12:33 
    Oracle 11g的Server Result Cache特征

    --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 code:


    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  &nb

    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 code:


    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                               

    --看下相关视图的内容:
    PHP code:


    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
    .

    --也可以使用dbms_result_cache.memory_report来查看内存分配情况
    PHP code:


    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.020of the Shared Pool]

    ... 
    Fixed Memory 5132 bytes [0.001of the Shared Pool]

    ... 
    Dynamic Memory 98396 bytes [0.019of 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.



    SQLselect 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 对象信息.



    SQLselect from V$RESULT_CACHE_DEPENDENCY;



     
    RESULT_ID  DEPEND_ID  OBJECT_NO

    ---------- ---------- ----------

             
    1          0      58797



    --对象依赖信息.



    --
    重新执行语句复用reselt set.

    SQLselect /*+ result_cache */ owner,count(*) from t_compress group by owner;

    12 rows selected.



    Execution Plan

    ----------------------------------------------------------

    Plan hash value2456935480

    --------------------------------------------------------------------------------

    Id  Operation           Name                       Rows  Bytes Cost

    (%CPU)| Time     |

    --------------------------------------------------------------------------------



    |   
    SELECT STATEMENT    |                            |    12 |    72 |    79

       
    (8)| 00:00:01 |



    |   
    |  RESULT CACHE       5bg7fxv3404w32v0vqv0bhgccf |       |       |

          |          |



    |   
    |   HASH GROUP BY     |                            |    12 |    72 |    79

       
    (8)| 00:00:01 |



    |   
    |    TABLE ACCESS FULLT_COMPRESS                 57865 |   339K|    74

       
    (2)| 00:00:01 |



    --------------------------------------------------------------------------------

    Result Cache Information (identified by operation id):

    ------------------------------------------------------



       
    column-count=2dependencies=(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.



    SQLselect owner,count(*) from t_compress group by owner;



    12 rows selected.



    Execution Plan

    ----------------------------------------------------------

    Plan hash value2456935480

    --------------------------------------------------------------------------------

    Id  Operation          Name       Rows  Bytes Cost (%CPU)| Time

    --------------------------------------------------------------------------------

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

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

    |   |   TABLE ACCESS FULLT_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.



    SQLselect owner,count(*) from t_compress group by owner;



    12 rows selected.



    Execution Plan

    ----------------------------------------------------------

    Plan hash value2456935480

    --------------------------------------------------------------------------------

    Id  Operation           Name                       Rows  Bytes Cost

    (%CPU)| Time     |

    --------------------------------------------------------------------------------

    |   
    SELECT STATEMENT    |                            |    12 |    72 |    79

       
    (8)| 00:00:01 |



    |   
    |  RESULT CACHE       5bg7fxv3404w32v0vqv0bhgccf |       |       |

          |          |



    |   
    |   HASH GROUP BY     |                            |    12 |    72 |    79

       
    (8)| 00:00:01 |



    |   
    |    TABLE ACCESS FULLT_COMPRESS                 57865 |   339K|    74

       
    (2)| 00:00:01 |



    --------------------------------------------------------------------------------

    Result Cache Information (identified by operation id):

    ------------------------------------------------------



       
    column-count=2dependencies=(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  row

    --这种情况下才能使用result set.


    只看该作者    顶部
    离线 小人物
    Small Potatoes


    精华贴数 0
    个人空间 0
    技术积分 1953 (1023)
    社区积分 40 (6629)
    注册日期 2003-5-8
    论坛徽章:30
    ITPUB元老会员2006贡献徽章授权会员2010年世界杯参赛球队:葡萄牙生肖徽章2007版:蛇生肖徽章2007版:鸡
    2008北京奥运纪念徽章:跳水生肖徽章2007版:鸡生肖徽章:龙生肖徽章:虎生肖徽章:鸡生肖徽章:虎

    发表于 2007-8-22 12:35 
    一个测试例子,欢迎大家指证.


    只看该作者    顶部
    离线 xzh2000
    仙人抚我须 结发授长生



    精华贴数 13
    个人空间 0
    技术积分 47269 (19)
    社区积分 5400 (362)
    注册日期 2002-7-17
    论坛徽章:34
    现任管理团队成员ITPUB元老九尾狐狸玉石琵琶紫蜘蛛蓝色妖姬
    八级虎吧徽章红孩儿铁扇公主玉兔嫦娥授权会员

    发表于 2007-8-22 13:28 
    good job.


    __________________
    过目即忘  插柳成荫
    只看该作者    顶部
    离线 vongates
    开门


    精华贴数 3
    个人空间 0
    技术积分 19942 (60)
    社区积分 10076 (203)
    注册日期 2002-11-28
    论坛徽章:94
    管理团队成员2010新春纪念徽章生肖徽章:马生肖徽章:马生肖徽章:马生肖徽章:马
    生肖徽章:马生肖徽章:马生肖徽章:马生肖徽章:马生肖徽章:马生肖徽章:马

    发表于 2007-8-22 13:30 
    建议授精


    __________________
    只看该作者    顶部
    离线 NinGoo
    何乡是吾乡,归期未有期


    来自 杭州
    精华贴数 5
    个人空间 235
    技术积分 13246 (106)
    社区积分 4341 (430)
    注册日期 2004-12-7
    论坛徽章:98
    管理团队成员ITPUB元老八级虎吧徽章生肖徽章2007版:蛇祖国60周年纪念徽章生肖徽章2007版:龙
    生肖徽章2007版:狗2008北京奥运纪念徽章:篮球2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:水球2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:网球

    发表于 2007-8-22 13:38 
    呵呵,刚看到。早知道我刚这篇就不写了

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


    __________________
    只看该作者    顶部
    离线 teddyboy
    永远的DBA


    精华贴数 0
    个人空间 0
    技术积分 4752 (353)
    社区积分 205 (2852)
    注册日期 2002-6-13
    论坛徽章:6
    ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星
          

    发表于 2007-8-22 13:45 
    支持,顶!注意排版,ningoo那个看起来舒服多了,


    __________________
    只看该作者    顶部
    离线 teddyboy
    永远的DBA


    精华贴数 0
    个人空间 0
    技术积分 4752 (353)
    社区积分 205 (2852)
    注册日期 2002-6-13
    论坛徽章:6
    ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星
          

    发表于 2007-8-22 13:50 


    QUOTE:
    最初由 NinGoo 发布
    呵呵,刚看到。早知道我刚这篇就不写了

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


    PHP code:


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

    .............

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


    __________________
    只看该作者    顶部
    离线 NinGoo
    何乡是吾乡,归期未有期


    来自 杭州
    精华贴数 5
    个人空间 235
    技术积分 13246 (106)
    社区积分 4341 (430)
    注册日期 2004-12-7
    论坛徽章:98
    管理团队成员ITPUB元老八级虎吧徽章生肖徽章2007版:蛇祖国60周年纪念徽章生肖徽章2007版:龙
    生肖徽章2007版:狗2008北京奥运纪念徽章:篮球2008北京奥运纪念徽章:射箭2008北京奥运纪念徽章:水球2008北京奥运纪念徽章:摔跤2008北京奥运纪念徽章:网球

    发表于 2007-8-22 13:53 


    QUOTE:
    最初由 teddyboy 发布
    PHP code:


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

    .............

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


    这个我估计是文档有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


    __________________
    只看该作者    顶部
    离线 teddyboy
    永远的DBA


    精华贴数 0
    个人空间 0
    技术积分 4752 (353)
    社区积分 205 (2852)
    注册日期 2002-6-13
    论坛徽章:6
    ITPUB元老会员2007贡献徽章会员2006贡献徽章授权会员ITPUB新首页上线纪念徽章数据库板块每日发贴之星
          

    发表于 2007-8-22 13:58 


    QUOTE:
    最初由 NinGoo 发布


    这个我估计是文档有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


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


    __________________
    只看该作者    顶部
    离线 小人物
    Small Potatoes


    精华贴数 0
    个人空间 0
    技术积分 1953 (1023)
    社区积分 40 (6629)
    注册日期 2003-5-8
    论坛徽章:30
    ITPUB元老会员2006贡献徽章授权会员2010年世界杯参赛球队:葡萄牙生肖徽章2007版:蛇生肖徽章2007版:鸡
    2008北京奥运纪念徽章:跳水生肖徽章2007版:鸡生肖徽章:龙生肖徽章:虎生肖徽章:鸡生肖徽章:虎

    发表于 2007-8-22 15:34 


    QUOTE:
    最初由 teddyboy 发布
    支持,顶!注意排版,ningoo那个看起来舒服多了,

    改了


    只看该作者    顶部
    相关内容


    CopyRight 1999-2006 itpub.net All Right Reserved.
    北京皓辰网域网络信息技术有限公司. 版权所有
    E-mail:Webmaster@itpub.net
    网站律师 隐私政策 知识产权声明
    京ICP证:060528号 联系我们