当前位置:  数据库>oracle

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

    来源: 互联网  发布时间:2017-06-08

    本文导语: 模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化...

模仿Oracle性能诊断艺术中的例子做了两个试验,书上说如果不用RELIES_ON,则函数依赖的对象发生的变更操作就不会导致结果缓存的失效操作(result_cache RELIES_ON(test1,test2)),试验证明不对,函数f1()并没有使用RELIES_ON,但表上的变化影响到了函数。

SQLPLUS spool 到动态日志文件名

Oracle SQLPLUS提示符设置

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

C:Documents and Settingsguogang>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

SQL> execute dbms_result_cache.Bypass(bypass_mode=>true,session=>true);
SQL> select f1() from dual;
F1()
----------
60681409

SQL> execute dbms_result_cache.Bypass(bypass_mode=>false,session=>true);
SQL> select f1() from dual;
F1()
----------
60681409



SQL> delete from test1 where object_type = 'VIEW' and rownum delete from test2 where object_type = 'VIEW' and rownum commit;
SQL> select f1() from dual;
F1()
----------

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


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

SQL> select f2() from dual;
F2()
----------
59788330


SQL> delete from test1 where object_type = 'VIEW' and rownum delete from test2 where object_type = 'VIEW' and rownum commit;
SQL> select f2() from dual;
F2()
----------
58914853

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


    
 
 

您可能感兴趣的文章:

  • Oracle内存数据库11g和高速缓存11g上市
  • Oracle 系统变量函数介绍
  • Oracle 系统变量函数用法指南
  • Oracle中decode函数的用法
  • Oracle round()函数与trunc()函数区别介绍
  • oracle中lpad函数的用法详解
  • MySQL实现类似Oracle中的decode()函数的功能
  • Oracle函数substr(str1, pos, [len])
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • SQL中Charindex和Oracle中对应的函数Instr对比
  • apache通过php的oci函数读取Oracle(字符集ZHS16GBK)时,显示乱码,如何解决?
  • Oracle Max函数使用中出现的问题
  • oracle sys_connect_by_path 函数 结果集连接 iis7站长之家
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • c#中oracle to_date函数用法举例
  • Oracle 函数用法之decode
  • Oracle过程与函数的区别分析
  • Oracle层次查询和with函数的使用示例
  • oracle的nvl函数的使用介绍
  • c#中oracle的to_date函数使用方法
  • Oracle中nul()函数
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle存储过程如何返回一个结果集&如何获取
  • shell调用oracle储存过程,怎么判断储存过程执行结果是否正确
  • Oracle的大数据量查询结果显示问题。(高手帮忙)
  • oracle导出sql语句的结果集和保存执行的sql语句(深入分析)
  • Oracle将查询的结果放入一张自定义表中并再查询数据
  • 有关结果数据集的修改-java和ORACLE数据库
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)
  • Linux下用SHELL脚本执行带输入输出参数的ORACLE存储过程并得到结果
  • Oracle中返回结果集的存储过程分享
  • oracle sys_connect_by_path 函数 结果集连接
  • 详解如何在Oracle中连接输出结果
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,