Oracle 11g 的PL/SQL函数结果缓存
模拟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函数结果缓存的更多相关文章
- 64位Oracle 11g 使用PL/SQL
Oracle 11g和PL/SQL安装完后,发现打开PL/SQL并不能连接Oracle数据库! [第一回合]完败! 先是在网上找解决方法,说是需要使用Net Configuration Assista ...
- 【转】Win7 64bit Oracle 11g 使用PL/SQL Developer 连接时提示“SQL*Net not properly installed”
转载:http://www.cnblogs.com/xihuaodc/p/3189257.html 因为之前的Oracle不能用了,所以重新安装了64位的Oracle,安装一路正常 完了之后安装了P ...
- windows10 64位下安装oracle 11g和PL/SQL Developer
一.材料准备: oracle11g安装包(64位) oracle11g客户端(32位) PL\SQL Developer安装包(32位) 1.下载Oracle 11g链接:http://www.ora ...
- Oracle学习笔记之五,Oracle 11g的PL/SQL入门
1. PL/SQL概述 PL/SQL(Procedural Language/SQL)是Oracle的专用语言,是对标准SQL语言的扩展,它允许在其内部嵌套普通的SQL语句,还可以定义变量和常量,允许 ...
- Oracle数据库之PL/SQL过程与函数
Oracle数据库之PL/SQL过程与函数 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据 ...
- oracle PL/SQL(procedure language/SQL)程序设计(续集)之PL/SQL函数
PL/SQL函数 examples:“ 构造一个邮件地址 v_mailing_address := v_name||CHR(10)|| ...
- 在SQL中使用PL/SQL函数存在的问题
-----------------------------Cryking原创------------------------------ -----------------------转载请注明出处, ...
- 每周一书《Oracle 12 c PL(SQL)程序设计终极指南》
本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQ ...
- Oracle 客户端安装 + pl/sql工具安装配置
Oracle 客户端安装 + pl/sql工具安装配置 下载oracle客户端,并在本地安装. 11g下载地址为: http://www.oracle.com/technetwork/databas ...
随机推荐
- Hadoop-2.2.0中国文献—— MapReduce 下一代 -- 公平调度
目的 此文档描写叙述了 FairScheduler, Hadoop 的一个可插入式的调度器.同意 YARN 应用在一个大集群中公平地共享资源. 简单介绍 公平调度是一种分配资源给应用的方法,以致到最后 ...
- HTML表格标签的使用-<table>
<html> <head> <title> 表格标签 </title> <!-- 标签名:table 定义一个表格 子标签:<caption ...
- 多线程之join方法
join方法的功能就是使异步执行的线程变成同步执行.也就是说,当调用线程实例的start方法后,这个方法会立即返回,如果在调用start方法后后需要使用一个由这个线程计算得到的值,就必须使用join方 ...
- 李林APUE之进程的封装
1.子进程是父进程的副本,获得父进程的数据空间/堆/栈,父子进程共享代码段.子进程从fork后開始运行.返回值=0表示子进程,由于子进程能够通过函数来获取父进程的ID,可是父进程无法知道子进程的ID. ...
- 一百万数据索引实例測试--mysql
推荐书籍:http://pan.baidu.com/s/1sjJIyRV 任务描写叙述: 如果一高频查询例如以下 SELECT * FROM user WHERE area='amoy' AND s ...
- php 禁止 URL 直接访问 php文件
通过判断访问来源来实现. $fromurl="http://www.111.com/index.php"; //只能从这个地址访问 if( $_SERVER['HTTP_REFER ...
- Node.js v0.10.31API手冊-控制台
Node.js v0.10.31API手冊-文件夹 控制台 Object 用于向 stdout 和 stderr 打印字符.类似于大部分 Web 浏览器提供的 console 对象函数,在这里则是输出 ...
- QTP脚本--应用参数化来测试某个输入框
以前一直觉得自己没有写代码的资质,太急于求成,以为一天就能写好几个功能,几千行代码,于是就没耐心了,没心情学下去了....但是最近发现其实写代码是一个漫长的过程,都是在修修改改中成长起来的.于是今天试 ...
- 第一章_servlet
[Servlet与Jsp学习指南] *学习这servlet前.需要下载servlet-api.jar,MyEclipse给自己带来的需求javaEE3.0的天赋足以使用注解获得的版本号servlet ...
- hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)
http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...