关于oracle result_cache
结果集缓存
和聚合物化视图类似,报表系统和数据仓库系统是最适合结果集缓存的,这些系统通常具有大量复杂的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的更多相关文章
- 在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 ...
- Oracle 11g新特性
文章转自网络 Oracle 11g于2007年7月11日美国东部时间11时(北京时间11日22时)正式发布,11g是甲骨文公司30年来发布的最重要的数据库版本,根据用户的需求实现了信息生命周期管理(I ...
- oracle 11g 之 result cache
oracle 11g 之 result cache 今天是2013-10-12,打算最近时间研究一下shared pool的相关原理以及awr报告分析.今天学习一下在oracle 11g shared ...
- [每日一题] 11gOCP 1z0-053 :2013-10-12 RESULT_CACHE在哪个池?.............................44
转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12657479 正确答案:B Oracle 11g 新特性:Result Cache , ...
- Oracle数据库之PL/SQL过程与函数
Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...
- Oracle 11g 的PL/SQL函数结果缓存
模拟Oracle性能诊断艺术做了两个试验样品.书上说的不承担RELIES_ON.果缓存的失效操作(result_cache RELIES_ON(test1,test2)).试验证明不正确,函数f1() ...
- Oracle数据库之开发PL/SQL子程序和包
Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...
- ORACLE当中自定义函数性优化浅析
为什么函数影响性能 在SQL语句中,如果不合理的使用函数(Function)就会严重影响性能,其实这里想说的是PL/SQL中的自定义函数,反而对于一些内置函数而言,影响性能的可能性较小.那么为什么SQ ...
- Oracle 升级的必要性
一.Oracle 历史 Oracle database 作为Oracle 公司的商业产品,凭借其稳定性和运行高效占据了全球三成以上的市场.并且主要是金融.政府等领域. Oracle 数据库拥有近40年 ...
随机推荐
- Android学习:Notification状态栏通知
Notification是显示在手机状态栏的通知,它代表一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification.在小米手机上,手指在屏幕顶端向下划 ...
- 更改oracle归档模式路径
1.更改归档路径 在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area.对于这个路径,ORACLE有一个限制,就是默认只能有2G的空间给归档日志使用 ...
- java核心技术笔记
1.类和对象 第四章:面向对象 日历的作用是提供某个时间点的信息 查询设置信息:GregorianCalendar now = new GregorianCalendar() int month = ...
- yarn配置日志聚合
[原文地址] 日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制.默认情况下, ...
- React 学习之路 (一)
先说一说对React的体验,总结 首先react相对angular来说入手简单暴力,在学习的这段时间里发现: 我们每天做的事就是在虚拟DOM上创建元素然后在渲染到真实的DOM中 渲染到真实DOM上的R ...
- java中基本类型double和对象类型Double
Double.valueOf(str)把String转化成Double类型的对象比如Stirng str="1.0";那么Double.valueOf(str)等价于new Dou ...
- 怎样把Word文档导入Excel表格
Word是现在办公中的基础文件格式了,很多的内容我们都通过Word来进行编辑,那么当我们需要将Word文档里的信息导入到Excel里面的时候,我们应该怎样做呢?下面我们就一起来看一下吧. 操作步骤: ...
- LCA || BZOJ 1602: [Usaco2008 Oct]牧场行走 || Luogu P2912 [USACO08OCT]牧场散步Pasture Walking
题面:[USACO08OCT]牧场散步Pasture Walking 题解:LCA模版题 代码: #include<cstdio> #include<cstring> #inc ...
- SQL Server 索引自动组织维护
公司的一个产品中的数据库,几个热点表因为主键和索引设计不合理,造成索引碎片过大,影响性能. 我尝试新建了一个索引碎片整理的定时任务,用于维护索引锁片和统计信息. 具体的过程如下: 本文原创,转发请表明 ...
- I2C驱动框架 (kernel-3.4.2)
先用韦老师的图: 注: 新版本内核的i2c驱动框架采用了 i2c_client -------> i2c_bus_type <-------- i2c_driver 框架 如 ...