Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

12c Planos adaptáveis ​​no SQL Developer


Estou trabalhando no ajuste de algumas instruções SQL em um banco de dados recém-atualizado, do Oracle 11.2.0.4 para 12.1.0.2. Como normalmente faço, gosto de usar o SQL Developer para ver o Plano de Explicação. Fiquei surpreso ao ver algum texto cinza na saída do Plano de Explicação, que você pode ver abaixo.



















Minha primeira reação foi surtar e me perguntar por que o Oracle tem uma junção de hash e uma junção de loops aninhados para unir duas tabelas. Mais adiante no plano, vejo um INDEX (FAST FULL SCAN) da mesma tabela que tem o INDEX (RANGE SCAN) realizado. Por que dois acessos da mesma tabela? O que o Oracle 12c está fazendo?



Tudo isso faz parte da otimização de consulta adaptável do novo 12c Optimizer. Para esta instrução SQL, o Otimizador determinou usar um plano inicial envolvendo a junção de Loops Aninhados. Para o plano que envolve a junção de loops aninhados, o Oracle acessará a tabela com uma varredura de intervalo de índice. O Optimizer também decidiu que um Index Fast Full Scan em uma Hash Join pode ser outro plano de execução a ser considerado. Antes de iniciar a execução da instrução SQL, o Optimizer tem dois planos. Um plano é o padrão plano e o outro plano é o adaptativo plano. O Oracle observará a execução da instrução SQL quando ela começar a ser executada com o plano padrão. Se o Oracle determinar que este é o plano de execução errado, ele poderá alternar para o plano adaptativo em tempo real.

Para obter mais informações sobre planos adaptáveis, consulte este white paper da Oracle. As páginas 3-5 ilustram os Planos de Junção Adaptável em ação.



O texto cinza no Plano Explicativo acima é simplesmente o plano adaptativo. O SQL Developer 4.1 mostra o plano padrão e o plano adaptável.



Mais abaixo no Plano de Explicação está a seção Outro XML, que pode ser vista abaixo. Podemos ver que minha versão db é 12.1.0.2. Também podemos mostrar que o tipo de informação é um Plano Adaptativo.





















Observe a seção intitulada "linhas". Podemos ver cada linha do Plano de Explicação. As linhas em que “skp=0” fazem parte do plano padrão. As linhas onde “skp=1” são o plano adaptativo, que agora sabemos que aparecem como texto cinza no SQL Developers.