Jeg havde et tidligere indlæg om brugerdefinerede rutiner med DBMS_STATS. Efter noget mere gravearbejde fandt jeg ud af, hvordan det fungerer. Jeg har nogle data i min database, som er gemt i en brugerdefineret type. Hvis du har en brugerdefineret type, kan du knytte din brugerdefinerede statistikindsamlingsrutine til Oracle Data Cartridge Interface (ODCI). ODCIStatsCollect-rutinen kaldes automatisk, når DBMS_STATS aktiveres på tabellen, der indeholder den brugerdefinerede type.
I mit tilfælde sporede jeg det høje CPU-forbrug til en SQL-sætning, som tredjepartsapplikationsleverandøren lagde i deres ODCIStatsCollect-rutine. På dette tidspunkt bliver det bare et problem med forespørgselsjustering. Hvordan kan vi skrive forespørgslen, så den bruger mindre CPU? Efter at have set på problemet, regnede jeg med, at den nemmeste måde var at tage underforespørgslen ud og lægge resultaterne i en global midlertidig tabel. Lad derefter resten af forespørgslen slutte sig til GTT'en i stedet for at slutte sig til selve underforespørgslen. Ved at gøre det blev CPU-bruget dramatisk reduceret. Jeg sendte rettelsen til applikationsleverandøren, og jeg venter på at se, hvad de siger.