Влияние размера пакета на производительность в Oracle 10g - PullRequest
6 голосов
/ 14 июля 2011

Использование Oracle 10g.Первоначальный разработчик Oracle для этого проекта ушел, и те из нас, кто остался, являются разумными разработчиками для Oracle, но нам нужна помощь в настройке и планировании.

У нас есть отдельные процедуры в «похожих» пакетах, некоторые (многие) из которых выросли в размерах, чтобы включить многие (50-ти) процедур различной сложности.

На данный момент несколько небольших процедур(выберите ID из контракта, где Item = 'xyz') в этих более крупных пакетах "намного быстрее, чем ожидалось", для выполнения изнутри этих пакетов (из TOAD, SQL Developer или из .NET Oracle Provider), чем при выполнении процедурыкомпилируется отдельно или в меньший пакет. (таблицы индексируются)

Должны ли быть затраты производительности для использования таких больших пакетов даже при вызове относительно простых отдельных процедур или есть какой-то «другой» фактор, который мы должны искать?

(примечание: обновление до Oracle 11 запланировано, но не «неизбежно»)

1 Ответ

7 голосов
/ 14 июля 2011

При первом вызове любого метода в пакете весь пакет должен быть прочитан в память.В общем, это должно быть преимуществом при условии, что если вы вызываете один метод в пакете, вполне вероятно, что многие связанные методы будут вызываться либо одной вызванной процедурой, либо последующими вызовами приложения.Но это означает, что первое выполнение потенциально замедляется из-за загрузки гораздо большего количества кода, который может быть строго необходим для простой функции.Однако это наказание должно исчезнуть после загрузки пакета в память.Не похоже, что вы говорите о проблеме с производительностью первого вызова процедуры, что может исключить это.

Есть ли какой-либо код в блоке инициализации пакета, которыйбудет выполняться до того, как будет выполнена небольшая процедура, которая может искажать результаты?

Как вы определяете, сколько времени потребуется для вызова этих небольших процедур и что означает "намного дольше"?Вы называете их несколько раз и измеряете небольшое количество прошедших миллисекунд и видите, скажем, увеличение времени выполнения на 30%?Или вы звоните им тысячи раз и видите увеличение времени выполнения на 1000%?

...