2011-07-14 35 views
6

使用Oracle 10g。这个项目的原始Oracle设计师已经开始工作,我们这些人仍然是Oracle的合理开发人员,但我们需要一些调整和计划方面的帮助。Oracle 10g中包的大小对性能的影响

我们在'喜欢'的软件包中有划分的程序,其中一些(许多)程序的规模已经扩大到包含许多(50个)不同复杂程度的程序。

此时,这些较大包中的几个小程序(从Contract中选择ID ='xyz')需要比预期更长的时间(从TOAD,SQL Developer或来自。 NET Oracle提供程序),而不是如果proc是自行编译或更小的程序包。 (表索引)

即使调用相对简单的单个过程或者是否存在一些我们应该寻找的“其他”因素,是否应该使用这样的大包的性能成本?

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

+0

@OMG,我们已经建立了基于包装大小-_should_-不影响过程性能的Oracle软件包,但我们看到了计数器指标并正在研究这种可能性。 –

回答

7

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

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

你是如何确定调用这些小程序需要多长时间以及“更长”意味着什么的?你是否称他们为少数几个毫秒,并且看到执行时间增加30%?还是你打电话给他们几千次,看到执行时间增加1000%?

+0

这在加载和初始化之外发生,所以在这种情况下不是问题。目前我们正在'观察'执行时间多长时间没有进行基准测试。如果我们在脚本窗口中从Toad执行,或者作为“小”(仅此项目)包的一部分,则响应在更大的包中是“即时”(sub second ..),它是3到5秒。 (使用完全校准的“1密西西比”方法。 –