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

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

  • 相关阅读:
    使用Python往手机发送短信(基于twilio模块)
    春&风
    故乡
    非常完美
    风 记忆
    风誓
    MATLAB的循环结构
    你要的快乐
    夕颜
    MATLAB的基本元素
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4827994.html
Copyright © 2011-2022 走看看