Muito bom dia, a todos!

Hoje vou falar sobre como verificar se as estatísticas das tabelas e índices da sua instância estão atualizadas. Quero lembrar que o otimizador do banco de dados Oracle nas versões “mais recentes”, otimizador baseado em custo (CBO - Cost-Based Optimizer), que  é o grande responsável por traçar o plano de execução, (definindo a “melhor” forma de se acessar um dado optando pelo “mais eficiente” método de acesso), utiliza as estatísticas para fazê-lo. Dessa forma, pode-se afirmar que a coleta e atualização das estatísticas está diretamente ligada à performance do banco de dados.

Bom...

Criei duas consultas para verificarmos quando foi a última vez que o objeto (índice ou tabela) teve suas estatísticas coletadas. É importante saber que o banco Oracle realiza de forma automática a coleta das estatísticas para o caso de uma variação muito grande do tamanho do objeto (cerca de 10%), mas isso é um assunto que falarei em outra oportunidade.

Na projeção da primeira consulta, deve-se observar a data de atualização das estatísticas das tabelas do seu ambiente:

SELECT STAT.OWNER AS "Schema proprietário",
         STAT.TABLE_NAME AS "Nome do objeto",
         STAT.OBJECT_TYPE AS "Tipo do objeto",
         STAT.NUM_ROWS AS "Quant. de Linhas",
         STAT.LAST_ANALYZED AS "Última coleta das estatísticas"
    FROM SYS.DBA_TAB_STATISTICS STAT
   WHERE STAT.OWNER NOT IN ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
ORDER BY LAST_ANALYZED;

Já na projeção da segunda (abaixo), é possível saber quando as estatísticas dos índices foram coletadas pela última vez:

SELECT STAT.OWNER AS "Schema proprietário",
         STAT. TABLE_NAME AS "Nome do objeto",
         STAT.OBJECT_TYPE AS "Tipo do objeto",
         STAT.NUM_ROWS AS "Quant. de Linhas",
         STAT.LAST_ANALYZED AS "Última coleta das estatísticas"
    FROM SYS.DBA_IND_STATISTICS STAT
   WHERE STAT.OWNER NOT IN ('SYS', 'SYSTEM', 'SYSMAN', 'DBSNMP')
ORDER BY LAST_ANALYZED;

Os campos projetados em ambas as consultas são:
"Schema proprietário": - campo que informa o esquema dono do objeto;
"Nome do objeto": - campo que informa o nome do objeto;
"Tipo do objeto": - informa o tipo do campo, no caso: tabela ou índice;
"Quant. de Linhas": - exibe a quantidade de registros do objeto;
"Última coleta das estatísticas": - data e hora da realização da última coleta (mais recente) das estatísticas do objeto em questão.

Na seleção da informação, abstraí alguns esquemas, pois são os reservados e utilizados pelo sistema, e não cabem termos conhecimento das estatísticas desses usuários.

A ordenação da informação está em ordem ascendente de data, ou seja, da menor para a maior apenas para facilitar e sabermos que os objetos com as estatísticas mais desatualizadas aparecerão na frente dos dados.

Por hoje é só!

Até a próxima!