模拟Oracle性能诊断艺术做了两个试验样品。书上说的不承担RELIES_ON。果缓存的失效操作(result_cache RELIES_ON(test1,test2))。试验证明不正确,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数。

C:\Documents and Settings\guogang>sqlplus gg_test/gg_test@10.10.15.25_gg

SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 8月 4 19:46:44 2014

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

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production



SQL> drop table test1 purge;

SQL> drop table test2 purge;

SQL> create table test1 as select * from dba_objects;

SQL> create table test2 as select * from all_objects;

SQL> select count(*) from test1;

  COUNT(*)

----------

     74144

SQL> select count(*) from test2;

  COUNT(*)

----------

     73248





SQL> create or replace function f1

   return number

   is

     l_ret number;

   begin

     select count(*) into l_ret

      from test1,test2

    where test1.object_type = test2.object_type

    and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');

     return l_ret;

   end;

   /

函数已创建。

SQL> set timing on

SQL> select f1() from dual;

      F1()

----------

  60681409

已用时间:  00: 00: 07.29

--禁用结果缓存

SQL> execute dbms_result_cache.Bypass(bypass_mode=>true,session=>true);

SQL> select f1() from dual;

      F1()

----------

  60681409

已用时间:  00: 00: 03.60

--启用结果缓存

SQL> execute dbms_result_cache.Bypass(bypass_mode=>false,session=>true);

SQL> select f1() from dual;

      F1()

----------

  60681409

已用时间:  00: 00: 00.00





SQL> delete from test1 where object_type = 'VIEW' and rownum <100;

SQL> delete from test2 where object_type = 'VIEW' and rownum <100;

SQL> commit;

SQL> select f1() from dual;

      F1()

----------

  59788330

已用时间:  00: 00: 07.09  --能够看到数据发生变化,即使不使用RELIES_ON,结果集也是正确的。



SQL> select count(*)

      from test1, test2

     where test1.object_type = test2.object_type

     and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');

  COUNT(*)

----------

  59788330

已用时间:  00: 00: 03.56   






SQL> create or replace function f2

   return number

     result_cache RELIES_ON(test1,test2)

   is

     l_ret number;

   begin

     select count(*) into l_ret

      from test1,test2

    where test1.object_type = test2.object_type

    and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');

     return l_ret;

   end;

   /

函数已创建。





SQL> select f2() from dual;

      F2()

----------

  59788330

已用时间:  00: 00: 03.54

SQL> select f2() from dual;

      F2()

----------

  59788330

已用时间:  00: 00: 00.00



SQL> delete from test1 where object_type = 'VIEW' and rownum <100;

SQL> delete from test2 where object_type = 'VIEW' and rownum <100;

SQL> commit;

SQL> select f2() from dual;

      F2()

----------

  58914853

已用时间:  00: 00: 03.50



SQL> select count(*)

      from test1, test2

     where test1.object_type = test2.object_type

     and test1.object_type in ('TABLE SUBPARTITION','VIEW','INDEX','TABLE');

  COUNT(*)

----------

  58914853

已用时间:  00: 00: 03.50

版权声明:本文博主原创文章。博客,未经同意不得转载。

Oracle 11g 的PL/SQL函数结果缓存的更多相关文章

  1. 64位Oracle 11g 使用PL/SQL

    Oracle 11g和PL/SQL安装完后,发现打开PL/SQL并不能连接Oracle数据库! [第一回合]完败! 先是在网上找解决方法,说是需要使用Net Configuration Assista ...

  2. 【转】Win7 64bit Oracle 11g 使用PL/SQL Developer 连接时提示“SQL*Net not properly installed”

    转载:http://www.cnblogs.com/xihuaodc/p/3189257.html  因为之前的Oracle不能用了,所以重新安装了64位的Oracle,安装一路正常 完了之后安装了P ...

  3. windows10 64位下安装oracle 11g和PL/SQL Developer

    一.材料准备: oracle11g安装包(64位) oracle11g客户端(32位) PL\SQL Developer安装包(32位) 1.下载Oracle 11g链接:http://www.ora ...

  4. Oracle学习笔记之五,Oracle 11g的PL/SQL入门

    1. PL/SQL概述 PL/SQL(Procedural Language/SQL)是Oracle的专用语言,是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,还可以定义变量和常量,允许 ...

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

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

  6. oracle PL/SQL(procedure language/SQL)程序设计(续集)之PL/SQL函数

    PL/SQL函数 examples:“ 构造一个邮件地址 v_mailing_address := v_name||CHR(10)||                                 ...

  7. 在SQL中使用PL/SQL函数存在的问题

    -----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...

  8. 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

    本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...

  9. Oracle 客户端安装 + pl/sql工具安装配置

    Oracle 客户端安装 +  pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/databas ...

随机推荐

  1. sdbntrjm57k

    http://www.zhihu.com/collection/24337307 http://www.zhihu.com/collection/24337259 http://www.zhihu.c ...

  2. linux内核笔记-内核同步

    linux内核就相当于不断对请求进行响应的服务器,这些请求可能来自CPU,可能来自发出中断的外部设备.我们将内核看作两种请求的侍者. (1)老板提出请求,侍者如果空闲,为老板服务.(系统调用或异常) ...

  3. SimpleDateFormat 的线程安全问题与解决方式

    SimpleDateFormat 的线程安全问题 SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的详细类. 它同意格式化 (date -> text).语法分析 (te ...

  4. hdu1254(bfs+dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1254 分析: 真正移动的是箱子,但是要移动箱子需要满足几个条件. 1.移动方向上没有障碍. 2.箱子后 ...

  5. web开发性能优化---项目架构篇

    项目技术架构层级规划和介绍 简称四横两纵 四横即四大层次.分别为: 1.用户渠道层:用户渠道层是直接面向终于用户.通过站点的形式向用户提供产品展示.企业市场宣传.对产品的订购.互动分享.客户关怀以及用 ...

  6. shiro权限架作战

    shiro框架作为一种特权的开源框架,通过身份验证和授权从具体的业务逻辑分离极大地提高了我们的发展速度,它的易用性使得它越来越受到人们的青睐.上一页ACL架相比,shiro能更easy的实现权限控制, ...

  7. WPF界面设计技巧(9)—使用UI自动化布局

    原文:WPF界面设计技巧(9)-使用UI自动化布局 最近一直没时间更新这系列文章,因为我一直在埋头编写我的第一个WPF应用程序:MailMail 今天开始编写附属的加密/解密工具,对UI自动化布局有些 ...

  8. 安装dotnet core

    CentOS 7.1下安装dotnet core .NET CORE的官方(http://dotnet.github.io/getting-started/)只提供了Windows, Ubuntu14 ...

  9. php截取等长UFT8中英文混合字串

    由于需要,想实现“php截取等长UFT8中英文混合字串”,可是网上找了很多代码不是有乱码就是不能实现等长(以一个中文长度为单位,两个英文字母算一个长度,如‘等长’长度为2,‘UTF8’长度也是2). ...

  10. 解决.net的堆碎片化带来的内存占用过大的问题

    场景 使用WCF开发的服务端在多个客户端登录后,其服务器的内存占用不断增加. 分析 使用Windbg分析得到内存碎片化严重,其中包含了非常大的空闲空间,最大的一块竟然有150M,真正使用的空间其实很小 ...