sql - 包大小对 Oracle 10g 性能的影响

标签 sql oracle plsql oracle10g package

使用 Oracle 10g。这个项目的原始 Oracle 设计师已经离开,我们剩下的人是 Oracle 的合理开发人员,但我们需要一些调整和规划帮助。

我们在“类似”包中划分了程序,其中一些(许多)程序的大小已经增加,以包括许多(50 ish)不同复杂性的程序。

此时,这些较大包中的几个小程序(从 Contract where Item = 'xyz' 中选择 ID)从这些包(来自 TOAD、SQL Developer 或来自 .NET Oracle Provider)中执行所需的时间“比预期的要长得多”如果 proc 是单独编译的,或者编译成一个较小的包,那么它会这样做。 (表已编入索引)

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

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

最佳答案

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

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

您如何确定调用这些小程序需要多长时间?“更长”是什么意思?您是否多次调用它们并测量少量经过的毫秒数并看到执行时间增加了 30%?还是您调用它们数千次并看到执行时间增加了 1000%?

关于sql - 包大小对 Oracle 10g 性能的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6695925/

相关文章:

sql - oracle pl/sql开发者如何查看时区

sql - 连接到 SQL Server 命名实例时出现延迟?

c# - 使用 IN 子句更新 SQL Server 中的多行

sql - PostgreSQL 多列 WHERE = ANY(ARRAY)

sql - 使用 MAX() 函数获取最大价格

oracle - 在oracle中创建表作为select语句主键

python - 无法使用 cx-Oracle 插入 Unicode

string - Oracle PL/SQL 中有分割字符串的函数吗?

sql - 是否使用 Null 来表示 Value Bad Practice?

sql - 使用另一个表中的值更新表