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

Cos*_*lis 6 sql oracle plsql package oracle10g

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

我们在'like'包中有分区程序,其中一些(许多)已经增长到包括许多(50个ish)不同复杂程度的程序.

此时,这些较大的软件包中的几个小程序(从Contract中选择Item,其中Item ='xyz')需要比这些软件包(来自TOAD,SQL Developer或.NET Oracle Provider)内部执行的时间长得多'预期'如果proc是自己编译的,还是编译成一个较小的包.(表格已编入索引)

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

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

Jus*_*ave 7

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

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

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