Miałem poprzedni post o procedurach zdefiniowanych przez użytkownika z DBMS_STATS. Po kilku dalszych kopaniach ustaliłem, jak to działa. W mojej bazie danych mam pewne dane, które są przechowywane w typie zdefiniowanym przez użytkownika. Jeśli masz typ zdefiniowany przez użytkownika, możesz powiązać procedurę gromadzenia statystyk zdefiniowanych przez użytkownika z interfejsem Oracle Data Cartridge Interface (ODCI). Procedura ODCIStatsCollect jest wywoływana automatycznie po wywołaniu DBMS_STATS w tabeli zawierającej typ zdefiniowany przez użytkownika.
W moim przypadku wyśledziłem wysokie zużycie procesora do jednej instrukcji SQL, którą zewnętrzny dostawca aplikacji umieścił w swojej procedurze ODCISstatsCollect. W tym momencie staje się to po prostu problemem dostrajania zapytań. Jak możemy napisać zapytanie, aby zużywało mniej procesora? Po przyjrzeniu się problemowi stwierdziłem, że najłatwiejszym sposobem jest usunięcie podzapytania i umieszczenie wyników w globalnej tabeli tymczasowej. Następnie połącz resztę zapytania z GTT zamiast dołączać do samego podzapytania. W ten sposób zużycie procesora zostało radykalnie zmniejszone. Wysłałem poprawkę do dostawcy aplikacji i czekam, aby zobaczyć, co powiedzą.