Jag hade ett tidigare inlägg om användardefinierade rutiner med DBMS_STATS. Efter lite mer grävande kom jag fram till hur det här fungerar. Jag har en del data i min databas som är lagrad i en användardefinierad typ. Om du har en användardefinierad typ kan du koppla din användardefinierade statistikinsamlingsrutin till Oracle Data Cartridge Interface (ODCI). ODCIStatsCollect-rutinen anropas automatiskt när DBMS_STATS anropas i tabellen som innehåller den användardefinierade typen.
I mitt fall spårade jag den höga CPU-användningen till en SQL-sats som leverantören av applikationer från tredje part lade i sin ODCIStatsCollect-rutin. Vid det här laget blir det bara ett problem med justering av frågor. Hur kan vi skriva frågan så att den använder mindre CPU? Efter att ha tittat på problemet kom jag på att det enklaste sättet var att ta ut underfrågan och lägga in resultaten i en global temporär tabell. Låt sedan resten av frågan gå med i GTT istället för att gå med i själva underfrågan. Genom att göra det minskade CPU-användningen dramatiskt. Jag skickade korrigeringen till applikationsleverantören och jag väntar på att se vad de säger.