Coleta de estatísticas automática deve ser suficiente para a maioria dos objetos de banco de dados que estão sendo modificados a uma velocidade moderada. No entanto, há casos em que a coleta de estatísticas automática pode não ser adequada. Como a coleta de estatísticas automática é executada durante uma janela de tempo durante um período de ociosidade, as estatísticas sobre as tabelas que são significativamente modificados durante o dia podem tornar-se obsoletas. Normalmente, isso pode acontecer em dois casos:
• Tabelas voláteis foram excluídas ou truncadas e posteriormente reconstruídas durante o decorrer do dia.
• Objetos que foram alvos de grandes cargas, que agregam 10% ou mais ao o tamanho total do objeto.
Caso seja verificada a necessidade da coleta manual pode-se utilizar o script abaixo que cria uma procedure de coleta de estatísticas e agenda um job para ser executado periodicamente. O script anexo realiza o agendamento da coleta manual de todo o banco.
/*
TABELAS CRÍTICAS DO CONNECTOR, COM GRANDE VOLUME DE DADOS E QUE SÃO UTILIZADAS DURANTE O PROCESSAMENTO
- TBLOGDOCUMENT
- TBPROCESS
- TBPROCESSDATA
- TBLOGODCUMENTSTATUS
- TBLOGDOCMESSAGE
- TBSTATISTICS
- TBLOT
- TBLOTS
- TBDATABASEINPUT
O script abaixo mostra a data da última coleta de estatística de cada índice. Se as estatísticas das tabelas críticas do connector tiverem sido atualizadas a mais
de uma semana, isso pode gerar lentidão no processamento.
*/
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;
/*
Após isso, se houver necessidade, deve-se fazer a atualização das estatísticas.
Para isso substituir o valor <SCHEMA_NAME> pelo nome do usuário e radar o comando abaixo:
*/
EXEC dbms_stats.gather_schema_stats('<SCHEMA_NAME', cascade=>TRUE);
|
Ao ser executado o script os valores next_date e interval devem ser ajustados:
next_date => to_date('17-10-2013 22:00:00', 'dd-mm-yyyy hh24:mi:ss'')
interval => 'trunc(SYSDATE+1)+22/24'');
|
Voltar
|