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

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

  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4827994.html
Copyright © 2011-2022 走看看