Oracle
 sql >> Database >  >> RDS >> Oracle

Routine definita dall'utente con DBMS_STATS, parte II

Avevo un post precedente sulle routine definite dall'utente con DBMS_STATS. Dopo aver scavato ancora, ho determinato come funziona. Ho alcuni dati nel mio database che sono archiviati in un tipo definito dall'utente. Se si dispone di un tipo definito dall'utente, è possibile associare la routine di raccolta delle statistiche definita dall'utente con Oracle Data Cartridge Interface (ODCI). La routine ODCIStatsCollect viene chiamata automaticamente quando DBMS_STATS viene richiamato nella tabella che contiene quel tipo definito dall'utente.

Nel mio caso, ho rintracciato l'utilizzo elevato della CPU in un'istruzione SQL che il fornitore di applicazioni di terze parti ha inserito nella routine ODCIStatsCollect. A questo punto, diventa solo un problema di ottimizzazione delle query. Come possiamo scrivere la query in modo che utilizzi meno CPU? Dopo aver esaminato il problema, ho pensato che il modo più semplice fosse eliminare la sottoquery e inserire i risultati in una tabella temporanea globale. Quindi fare in modo che il resto della query si unisca al GTT invece di unirsi alla sottoquery stessa. In questo modo, l'utilizzo della CPU è stato notevolmente ridotto. Ho inviato la correzione al fornitore dell'applicazione e sto aspettando di vedere cosa dicono.