Ik had een eerdere post over door de gebruiker gedefinieerde routines met DBMS_STATS. Na wat meer graven, heb ik vastgesteld hoe dit werkt. Ik heb enkele gegevens in mijn database die zijn opgeslagen in een door de gebruiker gedefinieerd type. Als u een door de gebruiker gedefinieerd type hebt, kunt u uw door de gebruiker gedefinieerde routine voor het verzamelen van statistieken koppelen aan de Oracle Data Cartridge Interface (ODCI). De routine ODCIStatsCollect wordt automatisch aangeroepen wanneer DBMS_STATS wordt aangeroepen op de tabel die dat door de gebruiker gedefinieerde type bevat.
In mijn geval herleidde ik het hoge CPU-gebruik tot één SQL-instructie die de externe applicatieleverancier in hun ODCIStatsCollect-routine had gezet. Op dit punt wordt het gewoon een probleem met het afstemmen van query's. Hoe kunnen we de query schrijven zodat deze minder CPU gebruikt? Nadat ik het probleem had bekeken, bedacht ik dat de gemakkelijkste manier was om de subquery te verwijderen en de resultaten in een globale tijdelijke tabel te plaatsen. Laat de rest van de query vervolgens deelnemen aan de GTT in plaats van aan de subquery zelf. Door dit te doen, werd het CPU-gebruik drastisch verminderd. Ik heb de oplossing naar de leverancier van de applicatie gestuurd en ik wacht af wat ze zeggen.