结果集缓存

和聚合物化视图类似,报表系统和数据仓库系统是最适合结果集缓存的,这些系统通常具有大量复杂的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. EgretPaper学习笔记一 (安装环境,新建项目)

    参考: 官方Egret3D教程 白鹭引擎5.3.0正式发布,支持3D游戏开发 一 下载安装EgretPaper Egret3D 编辑器的开发代号为“Paper”,于2018年9月份开始小规模内测,并在 ...

  2. js 函数中的this

    资料 function 函数 没有"this"的持久概念, 调用函数时,创建this function hello(thing) { console.log(this + &quo ...

  3. Nest.js 守卫

    Docs: https://docs.nestjs.com/guards 当调用者具有足够的权限时,特定路由才可用 // app.guard.ts import { CanActivate, Exec ...

  4. mybatis11--多对多关联查询

    多对多关联! 其实就是两个一对多的关联! 比如说 一个学生可以有多个老师!一个老师可以有多个学生! 那么 学生和老师之间的关系  可以理解为 多对多的关联关系! 关键是怎么建立数据库中两个表之间的关系 ...

  5. 七牛 OCR 接口调试 & 七牛鉴权 Token 应用

    接口规约 PHP 实现 核心代码 执行结果 源代码 Java 实现 核心代码 执行结果 源代码 [现学现卖]图片内容审核接口 Python 实现 核心代码 执行结果 源代码 Go 实现 核心代码 执行 ...

  6. background-color:transparent

    background-color没有none值   在工作中发现, 这样是没反应的, 要写这个样式才能去掉背景颜色() background-color属性详细链接: http://www.w3sch ...

  7. Android 学习书籍下载

    链接:https://pan.baidu.com/s/1Y6LHLJlYDfbNjoMAVjfjMw               密码:ywbk 链接:https://pan.baidu.com/s/ ...

  8. kubernetes组成

    kubernetes组成 k8s主要包括: kubectl 客户端命令行工具: 将接收的命令,发送给kube-apiserver,作为对整个平台操作的入口. kube-apiserver REST A ...

  9. java面试基础题------》Java 中List、Set、Map异同点

    借鉴地址:http://blog.csdn.net/speedme/article/details/22398395 几句喜欢的话,拷贝下来: 世间上本来没有集合,(只有数组参考C语言)但有人想要,所 ...

  10. vim-cscope插件

    在工程根目录生成cscope.out 索引文件的脚本 rm -f cscope* currentPath=$(pwd ) echo $currentPath find $currentPath -na ...