“Pending” Statistics – Como testar sem estragar?

Um dos grandes desafios no tema de Base de Dados esta relacionado com as estatísticas. Já abordei o tem em outros posts, como os links abaixo:

Uma das grandes confusões que há, é quando precisamos realizar testes com as estatísticas, porque realizar sobre um sistema em produção não parece ser boa ideía, certo?

Errado 🙂 :-), ou quase errado, obviamente que realizar testes em um ambiente que seja igual ao de produção é sempre a melhor idéia, porém, por vezes não há tempo ou condições de ter um ambiente parecido para simular estes testes.

Uma outra hipotese é utilizar pending statistics. O que é?

Este método permite que colete estatísticas sem que estas sejam publicadas para o CBO, ou seja, está visível apenas para sua visualização, o CBO não considera este tipo de estatísticas para gerar planos de execução.

Vamos a prática:

No meu teste, utilizei a tabela EMP do schema SCOTT.

  • Para começar, vamos bloquear as estatísticas, para que não sejam publicadas / consideradas pelo CBO.

dbms_stats.set_table_prefs (ownname=>’SCOTT’,tabname=> ‘EMP’,pname=> ‘PUBLISH’,pvalue=>’FALSE’);

  • Depois inibir as estatísticas, foi feito um select, para conferirmos a data/hora das estatísticas desta tabela.
  • Na imagem abaixo, iremos prosseguir com os nossos testes:
    • Na tabela DBA_TAB_PENDING_STATS, podemos ver as informações de estatísticas desta tabela que não estejam ainda disponíveis / publicadas para o CBO.
    • Como não temos nada, então foi realizada a coleta de estatísticas da tabela EMP.
    • Depois, iremos cruzar as informações das tabelas DBA_TAB_PENDING_STATS e DBA_TABLES.

Agora que já temos estatísticas novas, temos que utiliza-las, certo? Para isto temos que executar o comando abaixo:

alter session set optimizer_use_pending_statistics = true;

Pronto, agora podemos realizar os testes e avaliar o comportamento e novos planos de execução com estas estatísticas.

A partir destes testes, podemos apenas publicar estas estatísticas ou simplesmente apagar.

Para publicar / Tornar esta estatísticas disponível para o CBO:

dbms_stats.publish_pending_stats  (‘SCOTT’, ‘EMP’);

Para apagar estas estatísticas:

dbms_stats.delete_pending_stats (‘SCOTT’,‘EMP’);

O único problema desta feature é que está disponível a partir do 11g 😦

Saudações Vascaínas ….

2 comentários em ““Pending” Statistics – Como testar sem estragar?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s