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

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

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

Oracle11新特性——PLSQL函数缓存结果(一):http://yangtingkun.itpub.net/post/468/393972


上一篇介绍了11g的PLSQL函数缓存结果。这里简单说明一下RESULT_CACHEDETERMINISTIC函数的区别。

如果了解DETERMINISTIC功能,会发现DETERMINISTIC函数和RESULT_CACHE有功能类似之处。两种方法在函数输入相同的时候,都可以避免函数的再次执行。不过二者的实现方式不同,所以表现出来的很多特点也不相同。

DETERMINISTIC函数的主要意义是告诉Oracle,当这个函数输入的参数确定时,输出也是确定的。而Oracle利用了这个功能,因此在一次函数调用中出现多次重复调用时,对函数只调用一次。

而11g新增的RESULT_CACHE则不然,这个方法是通过将函数调用的结果保存在SGARESULT CACHE中来实现的。当Oracle执行一个函数时,如果在RESULT CACHE中可以找到相关的结果,那么Oracle就不会再次执行这个函数,而直接将结果返回。

了解了这两个功能的实现方法,也就清楚了二者的区别。对于DETERMINISTIC功能而言,只有一次调用中的函数重复执行,才能避免函数的多次执行。而对于RESULT_CACHE而言,由于结果被SGA进行缓存,随后的调用都可以利用这个结果,而且其他的SESSION也是可以共享这个结果的。

用一个简单的例子来说明这个问题:

SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE (P_ID NUMBER) RETURN NUMBER RESULT_CACHE AS
2 BEGIN
3 DBMS_LOCK.SLEEP(5);
4 RETURN 1;
5 END;
6 /

Function created.

SQL>
SQL>
SQL> CREATE OR REPLACE FUNCTION F_RESULT_CACHE (P_ID NUMBER) RETURN NUMBER RESULT_CACHE AS
2 BEGIN
3 DBMS_LOCK.SLEEP(5);
4 RETURN 1;
5 END;
6 /

Function created.

SQL> CREATE OR REPLACE FUNCTION F_DETERMINISTIC (P_ID NUMBER) RETURN NUMBER DETERMINISTIC AS
2 BEGIN
3 DBMS_LOCK.SLEEP(5);
4 RETURN 1;
5 END;
6 /

Function created.

SQL> SET TIMING ON
SQL> SELECT F_DETERMINISTIC(1) FROM DUAL;

F_DETERMINISTIC(1)
------------------
1

Elapsed: 00:00:05.05
IXDBA.NET技术社区
SQL> SELECT F_DETERMINISTIC(1) FROM DUAL;

F_DETERMINISTIC(1)
------------------
1

Elapsed: 00:00:05.01
SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

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

Elapsed: 00:00:05.14
SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;

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

Elapsed: 00:00:00.00

从这里就可以看到二者的区别。DETERMINISTIC函数只对一次调用中的重复生效:

SQL> SELECT F_DETERMINISTIC(3) FROM TAB;

F_DETERMINISTIC(3)
------------------
1
1
1
1
1
1

6 rows selected.

Elapsed: 00:00:10.04
SQL> SELECT F_RESULT_CACHE(3) FROM TAB;

F_RESULT_CACHE(3)
-----------------
1
1
1
1
1
1

6 rows selected.

Elapsed: 00:00:05.02

由于SQLPLUS批量数组读取的机制,导致DETERMINISTIC方法对函数调用了两次。而RESULT_CACHE在一个查询中马上就可以使用前面语句得到的结果,所以函数只调用了一次。

DETERMINISTIC函数与SQLPLUSARRAYSIZE的关系的详细描述可以参考:

SQL> host
[oracle@yangtk ~]$ sqlplus yangtk/yangtk

SQL*Plus: Release 11.1.0.6.0 - Production on Mon Sep 10 15:33:14 2007

Copyright (c) 1982, 2007, Oracle. All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> SET TIMING ON
SQL> SELECT F_DETERMINISTIC(1) FROM DUAL;

F_DETERMINISTIC(1)
------------------
1

Elapsed: 00:00:05.01
SQL> SELECT F_RESULT_CACHE(1) FROM DUAL;



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


  上一篇: Oracle11新特性——PLSQL函数缓存...   下一篇: 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新特性——PLSQL函数缓存...
·Oracle11新特性——行列转换语句...
·Oracle11新特性——SQL缓存结果集...
·Oracle11新特性——行列转换语句...
·Oracle11新特性——SQL缓存结果集...
·Oracle11新特性——SQL缓存结果集...
·Oracle10g增加备份集的CATALOG
·Oracle11新特性——DATA GUARD打...
·Oracle11g新特性——LOB类型功能...
·Oracle11g新特性——密码区分大小...
·Oracle11新特性——PLSQL函数缓存...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——PLSQL新特性(...
·Oracle11新特性——在线操作功能...
·Oracle11新特性——在线操作功能...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接