li
  当前位置:主页 > 性能优化 > 文章内容
li
Oracle11新特性——PLSQL函数缓存结果(一)
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:3  
本文章共2353字,分2页,当前第1页,快速翻页:
 

打算写一系列的文章介绍11g的新特性和变化。

这篇介绍11g新增功能PLSQL函数缓存结果的功能。


Oracle11g新增的SQL缓存结果集的功能前面已经介绍过了。同时OraclePL/SQL的函数也进行了相应的增加。允许函数缓存返回结果。

先看一个简单的例子:

SQL> CREATE TABLE T AS SELECT * FROM DBA_SOURCE;

表已创建。

SQL> CREATE OR REPLACE FUNCTION F_NO_RESULT_CACHE RETURN NUMBER AS
2 V_RETURN NUMBER;
3 BEGIN
4 SELECT COUNT(*) INTO V_RETURN FROM T;
5 RETURN V_RETURN;
6 END;
7 /

函数已创建。

SQL> SET TIMING ON
SQL> SELECT F_NO_RESULT_CACHE FROM DUAL;

F_NO_RESULT_CACHE
-----------------
593334

已用时间: 00: 00: 12.26
SQL> SELECT F_NO_RESULT_CACHE FROM DUAL;

F_NO_RESULT_CACHE
-----------------
593334

已用时间: 00: 00: 07.53
SQL> SELECT F_NO_RESULT_CACHE FROM DUAL;

F_NO_RESULT_CACHE
-----------------
593334

已用时间: 00: 00: 08.17

对于普通的函数,需要每次都重新执行,而如果采用了RESULT_CACHE功能:

SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE RETURN NUMBER RESULT_CACHE AS
2 V_RETURN NUMBER;
3 BEGIN
4 SELECT COUNT(*) INTO V_RETURN FROM T;
5 RETURN V_RETURN;
6 END;
7 /

函数已创建。

已用时间: 00: 00: 00.03
SQL> SELECT F_RESULT_CACHE FROM DUAL;

F_RESULT_CACHE
--------------
593334

已用时间: 00: 00: 07.87
SQL> SELECT F_RESULT_CACHE FROM DUAL;

F_RESULT_CACHE
--------------
593334

已用时间: 00: 00: 00.06
SQL> DISC
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
断开

SQL> CONN YANGTK/yangtk@ORA11G
已连接。
IXDBA.NET社区论坛
SQL> SELECT F_RESULT_CACHE FROM DUAL;

F_RESULT_CACHE
--------------
593334

已用时间: 00: 00: 00.04

对于采用了RESULT_CACHE的函数,Oracle自动将函数的返回结果缓存,下次执行的时候,不会实际执行函数,而是直接返回结果。

而且由于缓存的结果存储在SGA中,因此所有的会话可以共享这个结果。在上面的例子中,断开连接并重建登陆后,新的会话也是可以利用存储在SGA中的函数缓存的。

注意,函数的RESULT_CACHE功能自动和函数的输入参数关联,即使输入参数不起任何作用,不同的输入参数也会导致RESULT_CACHE不生效。

SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE(P_IN NUMBER) RETURN NUMBER RESULT_CACHE AS
2 V_RETURN NUMBER;
3 BEGIN
4 SELECT COUNT(*) INTO V_RETURN FROM T;
5 RETURN V_RETURN;
6 END;
7 /

函数已创建。

已用时间: 00: 00: 00.07
SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)
-----------------
593334

已用时间: 00: 00: 06.90
SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)
-----------------
593334

已用时间: 00: 00: 00.04
SQL> SELECT F_RESULT_CACHE(2) FROM DUAL;

F_RESULT_CACHE(2)
-----------------
593334

已用时间: 00: 00: 07.15

下面看一下RELIES_ON语句对RESULT_CACHE的影响。建立了上面的函数只完成了一部分功能,如果函数中访问了数据库中的对象,那么需要指定RELIES_ON语句来说明结果依赖的对象。如果没有制定,会导致函数访问的数据变化后,RESULT CACHE仍然生效,这时候会返回错误的结果:

SQL> SELECT COUNT(*) FROM T;

COUNT(*)
----------
593334

已用时间: 00: 00: 08.11
SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

F_RESULT_CACHE(1)
-----------------
593334



阅读更多内容1 · 2 · 下一页>>


  上一篇: Oracle11新特性——行列转换语句...   下一篇: Oracle11新特性——PLSQL函数缓存...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·Oracle11新特性——行列转换语句...
·Oracle11新特性——SQL缓存结果集...
·Oracle11新特性——行列转换语句...
·Oracle11新特性——SQL缓存结果集...
·Oracle11新特性——SQL缓存结果集...
·Oracle10g增加备份集的CATALOG
·Oracle11新特性——DATA GUARD打...
·Oracle11g新特性——LOB类型功能...
·Oracle11g新特性——密码区分大小...
·Oracle10G新增NO提示
·Oracle11新特性——PLSQL函数缓存...
·Oracle11新特性——PLSQL函数缓存...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——在线操作功能...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接