Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Rotina definida pelo usuário com DBMS_STATS, Parte II


Eu tinha um post anterior sobre rotinas definidas pelo usuário com DBMS_STATS. Depois de mais algumas escavações, determinei como isso funciona. Eu tenho alguns dados em meu banco de dados que são armazenados em um tipo definido pelo usuário. Se você tiver um tipo definido pelo usuário, poderá associar sua rotina de coleta de estatísticas definida pelo usuário à Oracle Data Cartridge Interface (ODCI). A rotina ODCIStatsCollect é chamada automaticamente quando DBMS_STATS é invocado na tabela que contém esse tipo definido pelo usuário.

No meu caso, rastreei o alto uso da CPU para uma instrução SQL que o fornecedor de aplicativos de terceiros colocou em sua rotina ODCIStatsCollect. Neste ponto, torna-se apenas um problema de ajuste de consulta. Como podemos escrever a consulta para que ela use menos CPU? Depois de analisar o problema, percebi que a maneira mais fácil era retirar a subconsulta e colocar os resultados em uma Tabela Temporária Global. Em seguida, faça com que o restante da consulta se junte ao GTT em vez de se juntar à própria subconsulta. Ao fazer isso, o uso da CPU foi drasticamente reduzido. Enviei a correção para o fornecedor do aplicativo e estou esperando para ver o que eles dizem.