zoukankan      html  css  js  c++  java
  • Oracle 11g 的PL/SQL函数结果缓存

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

    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

    已用时间:  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

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

  • 相关阅读:
    PythonIDE
    Python学习笔记六:return的用法
    Python学习笔记三:逻辑操作符
    Python编程实现对CodeSys中ST代码的自动排版(一)
    Python学习笔记十二:列表(4)len 、in、For的使用
    Python学习笔记七:字符串的操作(一)
    Python学习笔记五:while语句
    Python编程实现对CodeSys中ST代码的自动排版(二)
    Python学习笔记十:列表(2)列表元素的读写
    Python学习笔记九:列表(1)列表元素介绍及创建方法
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4827994.html
Copyright © 2011-2022 走看看