性能独立过程与Oracle中的打包过程

P S*_*rma 2 oracle stored-procedures

独立程序和打包程序之间的性能差异是什么?这将是明智的表现,为什么?两者的执行是否有任何区别?

Mar*_*urz 9

汤姆:

始终使用包裹.
永远不要使用独立的程序,除了演示,测试和独立的实用程序(什么都不调用,什么都不调用)

在那里你也可以找到关于他们表现的非常好的讨论.只需在该页面上搜索"性能"即可.
如果仍然有严重的疑问,你可以随时测试自己哪一个更快.你肯定会通过这样做来学习新东西.

我对您提出的问题是:虽然在某些情况下调用包过程/函数似乎比调用独立过程/函数更慢,但使用包时可用的附加功能所带来的优势远远超过性能损失.所以,就像汤姆所说,使用包.


链接:http://asktom.oracle.com/pls/asktom/f?p = 100:11:0 ::::P11_QUESTION_ID:7452431376537


测试代码(2000万次调用,runstats_pkg是我根据Tom Kyterunstats包编写的):

CREATE OR REPLACE PACKAGE testperf AS
   FUNCTION pow(i INT) RETURN INT;
END;
/

CREATE OR REPLACE PACKAGE BODY testperf AS
   FUNCTION pow(i int) RETURN INT AS
   BEGIN
      RETURN i * i;
   END;
END;
/

CREATE OR REPLACE FUNCTION powperf(i INT) RETURN INT AS
BEGIN
   RETURN i * i;
END;
/

DECLARE
   I INT;
   S INT DEFAULT 0;
BEGIN
   runstats_pkg.start1;
   FOR I IN 1 .. 20000000 LOOP
      s := s + (powperf(i) / i);
   END LOOP;
   runstats_pkg.stop1;

   dbms_output.put_line(s);
   s := 0;

   runstats_pkg.start2;
   FOR I IN 1 .. 20000000 LOOP
      s := s + (testperf.pow(i) / i);
   END LOOP;
   runstats_pkg.stop2;

   dbms_output.put_line(s);

   runstats_pkg.show;
END;
Run Code Online (Sandbox Code Playgroud)

结果(Oracle XE):

Run1 latches total versus runs -- difference and pct
        Run1        Run2        Diff       Pct
       2,491       2,439         -52    102.13%

Run1 ran in 2304 hsecs
Run2 ran in 2364 hsecs
run 1 ran in 97.46% of the time
Run Code Online (Sandbox Code Playgroud)

结果(Oracle 11g R1,不同机器):

Run1 latches total versus runs -- difference and pct
        Run1        Run2        Diff       Pct
       2,990       3,056          66     97.84%

Run1 ran in 2071 hsecs
Run2 ran in 2069 hsecs
run 1 ran in 100.1% of the time
Run Code Online (Sandbox Code Playgroud)

所以,你去吧.真的没什么区别.想要更复杂的数据,还需要SQL DML吗?你得自己测试一下.

  • 有一个链接,点击**"说"** (2认同)

tui*_*oel 5

除了包可以具有状态和独立的过程和功能之外,没有性能差异.

包的使用更多地是关于代码的依赖性和分组.您可以将它们视为命名空间的替代方案.