Qual seria a melhor forma de coletar estatísticas de uma tabela com as
seguintes características:

 - Particionada por range (MES/ANO)

 - 13 partições, sendo 1 referente ao mes anterior, 1 referente ao mês atual
e as outras 11 partições com meses futuros. A partição referente ao mês
anterior não precisa ter suas estatísticas coletadas pois não sofrerá
alterações, somente a partição referente ao mês atual e aos futuros precisam
de estatística.

 - No final de cada mês a partição atual fica com uma média de 16 milhões de
registros as futuras não chegam a 300 registros até que se tornem atuais.

 - A máquina tem 8 processadores

 - Versão 9.2.0.4.0

Atualmente a minha rotina faz um cursor para retornar todas as partições com
exceção da de histórico e coleta as estatísticas  da seguinte forma:

DBMS_STATS.GATHER_TABLE_STATS(  'OWNER', 'TABELA' , CASCADE => FALSE
,GRANULARITY=>'PARTITION', PARTNAME =>  'PARTICAO' , ESTIMATE_PERCENT => 30
, METHOD_OPT => 'FOR ALL COLUMNS SIZE AUTO' , DEGREE => 4 );

Porém dessa forma o global_stats da tabela não é coletado, já que só coleto
estatísticas por partição. Caso eu sete o parâmetro GRANULARITY para ALL o
tempo de execução do dbms_stats fica imenso, já que além da partição atual
ele  considerará as informações da tabela inteira.

* Obs: As estatísticas dos indices são coletadas separadamente.

* Qual seria a forma ideal de coletar estatísticas individualmente por
partição e depois atualizar o global stats????*


-- 
Thiago Azevedo


[As partes desta mensagem que não continham texto foram removidas]

Responder a