Temos um número razoavelmente grande de consultas usando dicas de índice em nosso banco de dados 11.2.0.4. Recentemente, descobri alguns problemas de desempenho e descobri que alguns dos índices referenciados pelas dicas de consulta estavam ausentes. Estou preocupado que possa haver mais casos disso e gostaria de saber se é possível construir uma consulta para fazer o seguinte:
- Pesquise no cache do cursor todas as consultas com dicas de índice
- Extraia o nome do índice de cada dica e procure o índice no dicionário de dados.
- Retorne o nome de cada índice que está faltando.
Todos os índices seguem o mesmo esquema de nomenclatura: 6 letras, seguidas por 6 dígitos, seguidas pela string "$INDXn", onde n é um dígito 0-9.
Alguma sugestão de como abordar isso?
Pessoalmente, eu começaria com DBA_HIST_ACTIVE_SESS_HISTORY e examinaria todas as estatísticas que contêm esse tipo de dica.
A partir daí, você pode obter o nome do índice proveniente dessa dica e, em seguida, fazer uma pesquisa em dba_indexes para ver se o índice existe, é válido etc.
Você deve ser capaz de fazer isso via PL/SQL se quiser torná-lo realmente sofisticado e fazer tudo em uma única etapa, caso contrário, alguns pedaços de SQL e um aplicativo de planilha podem ser seus amigos.