2011-07-14 14 views
6

Korzystanie z Oracle 10g. Pierwotny projektant Oracle dla tego projektu ruszył dalej, a ci z nas pozostali rozsądnymi deweloperami dla Oracle, ale potrzebujemy pomocy w zakresie tuningu i planowania.Wpływ rozmiaru pakietu na wydajność w Oracle 10g

Mamy podzielone na sekcje procedury w pakietach "podobnych", niektóre (wiele) z nich urosły w taki sposób, że zawierają wiele (50 ish) procedur o różnym stopniu złożoności.

W tym momencie kilka małych procedur (wybierz ID z Kontraktu, w którym Element = 'xyz') w tych większych pakietach zajmuje znacznie więcej czasu niż oczekiwano w tych pakietach (od TOAD, SQL Developer lub od. NET Oracle Provider) niż wtedy, gdy proc jest skompilowany osobno lub na mniejszy pakiet. (Tabele są indeksowane)

Czy powinny występować koszty związane z wydajnością korzystania z takich dużych pakietów, nawet w przypadku wywoływania stosunkowo prostych indywidualnych procedur lub czy istnieje jakiś "inny" czynnik, którego powinniśmy szukać?

(uwaga: uaktualnienie do Oracle 11 jest planowane, ale nie „nieuchronne”)

+0

@OMG, zbudowaliśmy pakiety Oracle oparte na przekonaniu, że rozmiar paczki -_dla_- nie wpływa na wydajność procedury, ale widzimy wskaźniki liczników i badamy tę możliwość. –

Odpowiedz

7

Po raz pierwszy jakikolwiek sposób w opakowaniu jest wywoływany, cały pakiet musi być wczytywane do pamięci. Ogólnie rzecz biorąc, ma to być zaleta przy założeniu, że jeśli wywołujesz jedną metodę w pakiecie, prawdopodobnie wiele powiązanych metod zostanie wywołanych albo przez jedną procedurę, którą wywołałeś, albo przez kolejne wywołania aplikacji. Ale to oznacza, że ​​pierwsze wykonanie jest potencjalnie spowolnione przez ładowanie znacznie więcej kodu może być ściśle konieczne dla prostej funkcji. Kara ta powinna jednak zniknąć po załadowaniu paczki do pamięci. Nie brzmi to tak, jakbyś mówił o problemie z wykonywaniem pierwszego wywołania procedury, co by skłoniło do wykluczenia tego.

Czy w bloku inicjalizacyjnym pakietu znajduje się kod, który byłby uruchamiany przed wykonaniem małej procedury, która może być przekrzywiona w wynikach?

Jak określasz, ile czasu zajmuje wywołanie tych małych procedur i co oznacza "znacznie dłużej"? Czy wywołujesz je kilka razy i mierzysz pewną niewielką liczbę upływających milisekund i widzisz, powiedzmy, 30-procentowy wzrost czasów realizacji? A może dzwonisz do nich tysiące razy i widzisz 1000-procentowy wzrost czasu realizacji?

+0

Dzieje się to bez ładowania i inicjalizacji, więc nie jest to problemem w tym przypadku. Obecnie "obserwujemy", jak długi jest czas wykonania bez jego analizy porównawczej. Jeśli wykonamy z Ropucha w oknie skryptu lub jako część "małego" (tylko tego przedmiotu), odpowiedź jest "natychmiastowa" (podsekunda) w większym pakiecie wynosi od 3 do 5 sekund. (używając metody _perfectly calibrated_ "1-Mississippi". –