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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • elementUI el-image图片加载失败解决[通俗易懂]

    elementUI el-image图片加载失败解决[通俗易懂]使用el-image显示图片加载失败代码:<el-imagestyle=”width:100%;height:50px;margin:4px5px2px5px;”src=”../assets/logo1.png”/>效果:解决:src用里面加个require代码:<el-imagestyle=”width:100%;height:50px;margin:4px5px2px5px;”:src=.

    2022年5月12日
  • Java连接MySQL mysql-connector-java-bin.jar驱动包的下载与安装

    Java连接MySQL mysql-connector-java-bin.jar驱动包的下载与安装eclipse在连接mysql数据库的时候要通过mysql驱动包进行连接首先进入官网中—-官网地址:https://dev.mysql.com/进入官网中选择DOWNLOADS(下载)2.选择下载中的mysql-connectors3.选择connector/JJ指的是Java4.接下在选择操作系统,此处选择platformindependent(独立于平台)…

    2022年5月21日
  • 点积与叉积[通俗易懂]

    点积与叉积[通俗易懂]1. 向量的点乘:向量点乘是其各个分量乘积的和几何意义:点乘的结果是一个标量,等于向量大小与夹角的cos值的乘积。                    a•b=|a||b|cosθ                如果a和b都是单位向量,那么点乘的结果就是其夹角的cos值。                    a•b=cosθ交换律:分配律:结合律:  其中m是实数。2.向量叉乘:两个…

    2022年10月25日
  • 六大算法之动态规划_leetcode迷宫最短路径

    六大算法之动态规划_leetcode迷宫最短路径在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。示例 1:输入:nums1 = [1,4,2], nums2 = [1,2,4]输出:2解释:可以画出两条不交叉的

    2022年8月9日
  • Python 读取txt、csv、mat数据并载入到数组

    一、txt文件数据载入到数组    这里结合上一篇博文的数据来讲怎么方便的载入.txt文件到一个数组,数据如下所示:1、自己写Python代码实现txt文本数据读取并载入成数组形式(PS:下面给了三种方法,选择理解)#-*-coding:cp936-*-importreimportlinecacheimportnumpyasnpimportosfilename=…

    2022年4月7日
  • 点击导航栏,切换div内容(js+css+html)[通俗易懂]

    点击导航栏,切换div内容(js+css+html)[通俗易懂]**成果展示**代码展示:* &lt;html&gt; &lt;head&gt; &lt;metacharset="utf-8"&gt; &lt;metahttp-equiv="X-UA-Compatible"content="IE=edge"&gt; &lt;title&gt;&lt;/tit

    2022年5月8日

发表回复

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

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