Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Benutzerdefinierte Routine mit DBMS_STATS, Teil II

Ich hatte einen früheren Beitrag über benutzerdefinierte Routinen mit DBMS_STATS. Nach etwas mehr Graben stellte ich fest, wie das funktioniert. Ich habe einige Daten in meiner Datenbank, die in einem benutzerdefinierten Typ gespeichert sind. Wenn Sie über einen benutzerdefinierten Typ verfügen, können Sie Ihre benutzerdefinierte Statistikerfassungsroutine mit Oracle Data Cartridge Interface (ODCI) verknüpfen. Die Routine ODCIStatsCollect wird automatisch aufgerufen, wenn DBMS_STATS für die Tabelle aufgerufen wird, die diesen benutzerdefinierten Typ enthält.

In meinem Fall habe ich die hohe CPU-Auslastung auf eine SQL-Anweisung zurückgeführt, die der Drittanbieter von Anwendungen in seine ODCIStatsCollect-Routine eingefügt hat. An diesem Punkt wird es nur zu einem Abfrageoptimierungsproblem. Wie können wir die Abfrage so schreiben, dass sie weniger CPU verbraucht? Nachdem ich mir das Problem angesehen hatte, dachte ich, der einfachste Weg wäre, die Unterabfrage zu entfernen und die Ergebnisse in eine globale temporäre Tabelle zu schreiben. Lassen Sie dann den Rest der Abfrage mit der GTT verbinden, anstatt mit der Unterabfrage selbst. Dadurch wurde die CPU-Auslastung drastisch verringert. Ich habe den Fix an den Anwendungsanbieter geschickt und warte darauf, was er sagt.