Você conhece alguma ferramenta para comparar plano de execução?

Compare execution plan

Existem situações em que precisamos comparar dois planos de execução para identificar suas diferenças, quando o plano de execução é simples conseguimos realizar essa tarefa inspecionando visualmente os dois planos gerados pelo Otimizador, mas se o plano de execução é mais complexo essa tarefa pode se tornar bem difícil.
Este artigo apresenta um recurso disponível no SQL Developer que permite a comparação de dois planos de execução de maneira muito simples.

Para demonstrar a utilização desse recurso vamos imaginar uma situação hipotética em que um consulta que executava numa base Oracle 9.2 tem seu plano modificado quando executada numa base Oracle 11.2.0.4.

Para essa demonstração vamos utilizar o Oracle SQL Developer 4.1.3.20 e para simular a execução da consulta em bases com versões de Oracle diferentes vamos utilizar o HINT “optimizer_features_enable”.

Plano de execução na base 11.2.0.4

Primeiro vamos conectar numa base Oracle 11.2.0.4 com usuário SH e executar a nossa consulta:

 

Consulta SQLDeveloper

Após a execução da consulta vamos acionar o ícone “Explain Plan” (F10).

 

Explain Plan SQLDeveloper

 

O plano de execução será exibido na parte inferior, logo abaixo da consulta:

 

Exibe Plano de execução

 

Plano de execução simulando base 9.2

Para gerar um plano de execução da mesma consulta como se ela estivesse executando numa base Oracle 9.2 vamos incluir o HINT “optimizer_features_enable(‘9.2.0’)” na consulta e executa-la novamente acionando F10. Será criada um nova aba na janela do plano de execução com o nome “Plano de Explicação”:

 

Exibe novo plano de execução

 

Selecione a aba do primeiro plano de execução “V$SQL_PLAN.SQL_ID=d7528wnd7kvfc” e com o botão direito do mouse selecione a opção “Comparar com Plano de Explicação”:

 

acionar comparação de plano

 

Os dois planos serão exibidos lado a lado em outra aba e as operações diferentes serão coloridas em vermelho:

 

planos de execução lado a lado

 

Observando o dois planos verificamos que as operações coloridas em vermelho são:

1) Operação JOIN: O primeiro plano usa HASH JOIN e o segundo NESTED LOOPS

2) Operação de acesso ao índice: O primeiro plano faz um FAST FULL SCAN enquanto o segundo faz UNIQUE SCAN

Conclusão

Na demonstração acima utilizamos um plano de execução simples para facilitar a explicação desse recurso no SQL Developer, mas este recurso é mais útil quando temos dois planos de execução complexos e precisamos identificar suas diferenças. Verificamos que a operação para comparar dois planos utilizando o SQL Developer é muito simples e o resultado da comparação colocando os dois planos lado a lado e colorindo as operações diferentes em vermelho facilita bastante a identificação das diferenças. Existem outras ferramentas no mercado que realizam esta tarefa, a vantagem do SQL Developer em relação ao seus concorrentes é que sua utilização é livre de encargos financeiros.

Referências

http://www.thatjeffsmith.com/archive/2012/02/quick-tip-comparing-explain-plans-with-sql-developer/

 
 
Promo-D75L

video-02
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *