Oracle 11g 的PL/SQL函数结果缓存

Oracle 11g 的PL/SQL函数结果缓存

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

    模拟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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116958.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • iis默认路径_服务器配置文件在哪

    iis默认路径_服务器配置文件在哪本文的性质为“编著”。“图形化网站管理者”请留步。 问题:当主机上的IIS服务由于各种原因无法打开时,无法看到当前系统内已经部署了哪些网站,以及其对应的目录等信息。为解决这一问题,本文通过查看IIS服务器的配置文件来获取系统内已部署网站的信息。 可能的“误导”预警:配置文件的信息与IIS的版本有关系,但本文仅为了解决问题,将操作系统与IIS版本混在了一起。 对win

    2022年9月25日
  • spring aop实例讲解_java swing 教程

    spring aop实例讲解_java swing 教程1.SpringAOP是什么?AspectOrientedProgramming:面向切面编程什么时候会出现面向切面编程的需求?按照软件重构的思想,如果多个类中出现重复的代码,就应该考虑定义一个共同的抽象类,将这些共同的代码提取到抽象类中,比如Teacher,Student都有username,那么就可以把username及相关的get、set方法抽取到SysUser中,这种情况,我们称…

    2022年8月11日
  • 实时车辆行人多目标检测与跟踪系统-上篇(UI界面清新版,Python代码)

    实时车辆行人多目标检测与跟踪系统-上篇(UI界面清新版,Python代码)摘要:本文详细介绍如何利用深度学习中的YOLO及SORT算法实现车辆、行人等多目标的实时检测和跟踪,并利用PyQt5设计了清新简约的系统UI界面,在界面中既可选择自己的视频、图片文件进行检测跟踪,也可以通过电脑自带的摄像头进行实时处理,可选择训练好的YOLOv3/v4等模型参数。该系统界面优美、检测精度高,功能强大,设计有多目标实时检测、跟踪、计数功能,可自由选择感兴趣的跟踪目标。博文提供了完整的Python程序代码和使用教程,适合新入门的朋友参考,完整代码资源文件请转至文末的下载链接。

    2022年10月13日
  • java的方法分为两大类型,java题库

    1.Java程序主要分为两种类型:应用程序和。2.Java程序用{}将多条语句组合在一起,语句之间必须用;隔开。3.在类声明中提供类标志的关键字是class。4.一个Java源程序编译后会生成一个扩展名为.class的字节码文件。5.应用程序编译后生成字节码文件,由Java.exe直接解释执行…

    2022年4月9日
  • UDP协议开发

    UDP协议开发1简介在进行电网插件开发的过程中,对电网接入程序进行了开发,使得在综合安防管理平台上能够非常方便的接入天地维正电网设备。电网数据采用UDP协议,通过监狱局域网,向用户指定的5个IP地址的某端口,同时发送,各IP地址收到的数据相同。因为是第一次使用网络数据报进行开发,因此遇到了许多的坑。在这里把遇到的问题组织成一个文档,重新理解在代码撰写过程中遇到的问题。本文档适用于初次使用UDP进行…

    2022年5月31日
  • ubuntu下DNS服务器配置

    ubuntu下DNS服务器配置现贴一个wiki上的dns配置(非常全面,查询用)http://wiki.ubuntu.org.cn/Bind9%E5%AE%89%E8%A3%85%E8%AE%BE%E7%BD%AE%E6%8C%87%E5%8D%97#Master_Server.EF.BC.88.E4.B8.BB.E6.9C.8D.E5.8A.A1.E5.99.A8.EF.BC.89_2进入正题:首先安装BIND套件

    2022年6月4日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号