Finalmente o CBO que não é o do Mc Donalds :)

Tentei colocar de forma sucinta o funcionamento do Cost-Based Optimizer (CBO), sem entrar em muitos detalhes técnicos, o objetivo é fazer entender o funcionamento do CBO.

Execution Plan:

Para falarmos de CBO é importante o conceito de execution plan, que nada mais é um caminho estruturado para se chegar aos dados que a query pretende. Nesta árvore estruturada, cada nó tem como por objetivo, filtrar e/ou acessar as porções de dados das tabelas e processar os relacionamentos (joins).

CBO:

Como falei no post anterior, o CBO têm por finalidade de eleger o melhor plano de execução possível para cada query, então basicamente temos o seguinte fluxograma:

  1. O user envia a query para o Oracle;
  2. O parser checa a sintaxe da query (hard), caso já esteja em memória faz um soft parser;
  3. O CBO recebe os vários planos de execuções possíveis para a query;
  4. Compara os planos execuções baseando-se nas informações de sistema, tabelas, parâmetros e etc;
  5. O CBO, em seu papel de juiz, escolhe o melhor plano que será executado;
  6. A query é executada com o plano de execução escolhido e os dados são retornados para o utilizador;

Em relação ao ponto 2 (Hard Parse vs. Soft Parse): Cada query quando processada pela 1ª vez, passa por todo o fluxo ilustrado e é guardado na shared pool, para que a próxima execução seja mais rápida. Portanto o Hard Parse passa por todo o fluxograma, enquanto o Soft Parse poupa (principalmente CPU) procedimentos, sendo necessário apenas os pontos 1,2 e 6.

Em relação ao ponto 4: Para que o Oracle consiga fazer um “julgamento” realmente bom, é imporantissímo que as informações estejam coerentes e implementadas, por vezes se esquece estatísticas de sistema, ou de atualizar estatísticas das tabelas. Todas aquelas informações estão correlacionadas.

É importante o trabalho de manutenção de estatísticas (com os seus vários possíveis metódos) sobre as tabelas, levando em consideração particionamentos, índices, histogramas e etc.

Baseado nisto, cada query só pode ter um plano de execução. Portanto, é possível relacionar  a v$sqlarea com v$sql_plan através das colunas plan_hash_value e sql_id.

Em um próximo post irei falar um pouco de histogramas 🙂

Saudações Vascaínas ….

2 comentários em “Finalmente o CBO que não é o do Mc Donalds :)

  1. Grande Ozal….
    Hoje tive de vir aqui…pois pensei que estava maluco… me tornando velho e esquecido…
    Só digo uma coisa a muito DBA com 10 anos de experiência que deveria ler isso.
    Um grande abraço.

  2. Update…
    Grande Ozal….
    Hoje tive de vir aqui…pois pensei que estava maluco… me tornando velho e esquecido…
    Só digo uma coisa há muitos DBA’s com 10 anos de experiência que deveriam ler isso.
    Um grande abraço.

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