结果集缓存

和聚合物化视图类似,报表系统和数据仓库系统是最适合结果集缓存的,这些系统通常具有大量复杂的SQL,其中不少子查询包含聚合函数,如果能够尽可能重用这些已经计算过的聚合结果集,将极大的提升系统性能并降低服务器负载。默认情况下,服务端结果集大小为共享池大小的0.5%,如果人工设置了共享池大小,则为1%,如果默认值不合适,可以调整result_cache_max_size,该参数声明了用于结果集缓存的SGA大小,将该值更改为0可以禁用结果集缓存,此时通常是应用使用了物化视图进行聚合查询优化或没有很多聚合查询的OLTP系统。需要注意的是,结果集缓存默认是否启用由result_cache_mode控制,参数声明了Oracle如何管理结果集缓存的使用,默认为MANUAL,也就是SQL语句必须使用优化器提示才能使用结果集缓存;当设置为FORCE时表示所有独立执行的语句都可以认为结果集缓存的候选。相对于聚合物化视图可以针对整个表进行聚合,具体查询中可以使用不同的group by字段作为条件重写,结果集缓存只能根据具体的绑定变量进行,由于对子查询块抽象和判断是否共用的成本较高,所以直接基于SQL块的结果集缓存效果性价比在大部分情况下不算很好。

不过11g中PL/SQL函数新增的RESULT_CACHE子句更加有价值,传统的DETERMINISTIC选项仅对于当前SQL语句引用的函数有效,而且不支持PL/SQL函数中调用其他PL/SQL函数。RESULT_CACHE刚好弥补了DETERMINISTIC的弱项,它使得在多个会话、不同的RAC节点、PL/SQL块中都可以重用某个PL/SQL函数的执行结果,其使用如下:

create or replace function getXXXdays(v_tenantid    in varchar2,

v_fundcode    in varchar2,

v_agencyno    in varchar2,

v_currentdate in varchar2,

n_offset      in number,

n_skip        in number := 1,

v_ageregion   in number := 0)

return number deterministic

RESULT_CACHE RELIES_ON(ta_thkopenday)  --只要加上RESULT_CACHE RELIES_ON子句即可,依赖数据源可以有多个,多个之间逗号分隔

is

result number(8);

begin

end;

/

我们有不少逻辑调用了一个计算交易日期的函数,这个函数又调用了其他很多函数,类似于下面的引用关系:

getintervaldays

gethkliqdays

gethkrealdays

getliqdays

getrealdays

我们仅通过为各函数增加RESULT_CACHE子句,性能就提升了10%。

如果启用了结果集缓存特性,还需要注意,每个结果集缓存可用的内存大小并不是整个结果集缓存大小,而是受RESULT_CACHE_MAX_RESULT参数控制,其默认为RESULT_CACHE_MAX_SIZE的5%,因为结果集缓存本身的目的并非缓存大型SQL或子查询的结果,所以通常最多增加到10%就足够了,最后应定期监控v$result_cache_statistics和v$result_cache_objects确定结果集缓存的效果,以及是否有必要继续开启结果集缓存,还需要注意不要过多的在高并发的存储过程以及函数上依赖于结果集缓存,它可能会导致latch free竞争严重,进而适得其反造成性能下降。

关于oracle result_cache的更多相关文章

  1. 在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT) ORA-00922: missing or invalid option

    在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT)  ORA-00922: missing or invalid option hostdr:[/ho ...

  2. Oracle 11g新特性

    文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...

  3. oracle 11g 之 result cache

    oracle 11g 之 result cache 今天是2013-10-12,打算最近时间研究一下shared pool的相关原理以及awr报告分析.今天学习一下在oracle 11g shared ...

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

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12657479 正确答案:B   Oracle 11g 新特性:Result Cache , ...

  5. Oracle数据库之PL/SQL过程与函数

    Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...

  6. Oracle 11g 的PL/SQL函数结果缓存

    模拟Oracle性能诊断艺术做了两个试验样品.书上说的不承担RELIES_ON.果缓存的失效操作(result_cache RELIES_ON(test1,test2)).试验证明不正确,函数f1() ...

  7. Oracle数据库之开发PL/SQL子程序和包

    Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...

  8. ORACLE当中自定义函数性优化浅析

    为什么函数影响性能 在SQL语句中,如果不合理的使用函数(Function)就会严重影响性能,其实这里想说的是PL/SQL中的自定义函数,反而对于一些内置函数而言,影响性能的可能性较小.那么为什么SQ ...

  9. Oracle 升级的必要性

    一.Oracle 历史 Oracle database 作为Oracle 公司的商业产品,凭借其稳定性和运行高效占据了全球三成以上的市场.并且主要是金融.政府等领域. Oracle 数据库拥有近40年 ...

随机推荐

  1. 扁平数组构建DOM树

    interface IOrganizationNode { id: string; code: string; name: string; localName: string; localNameLo ...

  2. 进程锁Lock

    例1: 10个人去买票,先去查询余票,有票就去购买.代码如下: # ticket.py {"ticket": 1} # 只有一张票 import json import time ...

  3. centos7 与 archlinux用户 安装 python3模块 pytaglib

    对于 centos7用户: yum group install "Development Tools" yum install taglib-devel yum install p ...

  4. 网页中顶部banner图自适应css

    //test.css .index-banner-top { width: 100%; background: url(../imgs/guanyu.png) no-repeat center cen ...

  5. 解决vue单页路由跳转后scrollTop的问题

    作为vue的初级使用者,在开发过程中遇到的坑太多了.在看页面的时候发现了页面滚动的问题,当一个页面滚动了,点击页面上的路由调到下一个页面时,跳转后的页面也是滚动的,滚动条并不是在页面的顶部 在我们写路 ...

  6. windows下eclipse实现操作虚拟机ubantu中的hdfs hbase

    1.首先打开虚拟机,查看虚拟机的ip地址 2.修改C:\Windows\System32\drivers\etc下的主机名与ip的映射文件 3.配置Map/reduce 配置成功后可以查看hdfs文件 ...

  7. js中级小知识

    1.作用域链 作用域:浏览器给js的一个生存环境(栈内存). 作用域链:js中的关键字var和function都可以提前声明和定义,提前声明和定义的放在我们的内存地址(堆内存)中.然后js从上到下逐行 ...

  8. SVN操作步骤

    1.第一次检出 svn co svn://192.168.1.1:5555/MMM 2.代码更新 svn update 3.代码提交 svn add *.c svn commit -m "d ...

  9. virtualenv与virtualenvwrapper虚拟环境

    python开发之virtualenv与virtualenvwrapper讲解 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物 ...

  10. etcd集群的搭建

    由于最近在学习kubernetes,etcd作为kubernetes集群的主数据库,必须先启动. etcds实例名称 IP地址 Hostname etcd 1 192.168.142.161 kube ...