Měl jsem předchozí příspěvek o uživatelsky definovaných rutinách s DBMS_STATS. Po nějakém dalším kopání jsem zjistil, jak to funguje. V databázi mám nějaká data, která jsou uložena v typu definovaném uživatelem. Pokud máte uživatelsky definovaný typ, můžete svou uživatelsky definovanou rutinu shromažďování statistik přidružit k rozhraní Oracle Data Cartridge Interface (ODCI). Rutina ODCIStatsCollect je volána automaticky při vyvolání DBMS_STATS v tabulce, která obsahuje daný uživatelsky definovaný typ.
V mém případě jsem vystopoval vysoké využití CPU na jeden příkaz SQL, který dodavatel aplikací třetí strany vložil do své rutiny ODCIStatsCollect. V tomto okamžiku se to stává pouze problémem ladění dotazů. Jak můžeme napsat dotaz tak, aby spotřeboval méně CPU? Když jsem se podíval na problém, přišel jsem na to, že nejjednodušším způsobem je vyjmout dílčí dotaz a umístit výsledky do globální dočasné tabulky. Poté nechte zbytek dotazu připojit k GTT namísto připojení k samotnému poddotazu. Tím se výrazně snížilo využití CPU. Odeslal jsem opravu dodavateli aplikace a čekám, co řeknou.