Oracle 10g中程序包大小对性能的影响

时间:2011-07-14 15:37:55

标签: sql oracle plsql oracle10g package

使用Oracle 10g。这个项目最初的Oracle设计师已经转移,我们这些人仍然是合理的Oracle开发人员,但我们需要一些调整和规划帮助。

我们在'like'包中有分区程序,其中一些(许多)已经扩大到包括许多(50个ish)不同复杂程序。

此时,这些较大的软件包中的几个小程序(从Contract中选择ID,其中Item ='xyz')需要比这些软件包(来自TOAD,SQL Developer或.NET)执行的“预期”更长的时间Oracle提供程序)比如果自己编译或更小的包编译。 (表已编入索引)

即使在调用相对简单的个别程序时,是否存在使用此类大型软件包的性能成本,或者是否存在我们应该寻找的某些“其他”因素?

(注意:计划升级到Oracle 11但不是'迫在眉睫')

1 个答案:

答案 0 :(得分:7)

第一次调用包中的任何方法时,需要将整个包读入内存。一般来说,如果你在一个包中调用一个方法,那么这应该是一个优势,很可能许多相关的方法将被你调用的一个过程或后续的应用程序调用调用。但它确实意味着通过加载更多代码可能会减慢第一次执行的速度,这对于简单函数来说可能是严格必要的。但是,一旦将包加载到内存中,该惩罚就会消失。听起来你不是在谈论程序第一次调用的性能问题,而这往往会排除这种情况。

程序包的初始化块中是否有任何代码在执行可能会导致结果偏差的小程序之前运行?

您如何确定调用这些小程序所需的时间以及“更长时间”的含义是什么?您是在几次调用它们并测量少量经过的毫秒数,并且看到执行时间增加了30%?或者你打电话给他们几千次,并看到执行时间增加1000%?