sql >> Base de Datos >  >> RDS >> Oracle

Planes adaptables 12c en SQL Developer

He estado trabajando en ajustar algunas sentencias SQL en una base de datos recién actualizada, de Oracle 11.2.0.4 a 12.1.0.2. Como suelo hacer, me gusta usar SQL Developer para ver el plan de explicación. Me sorprendió ver un texto gris en la salida del plan de explicación, que puede ver a continuación.

Mi primera reacción fue enloquecer y preguntarme por qué Oracle tiene tanto un Hash Join como un Nested Loops para unir dos mesas. Más adelante en el plan, veo un ÍNDICE (ESCANEO COMPLETO RÁPIDO) de la misma tabla que tiene el ÍNDICE (ESCANEO DE RANGO) realizado. ¿Por qué dos accesos de la misma mesa? ¿Qué está haciendo Oracle 12c?

Todo esto es parte de la Optimización Adaptativa de Consultas del nuevo 12c Optimizer. Para esta instrucción SQL, el optimizador ha determinado usar un plan inicial que involucra la unión de bucles anidados. Para el plan que involucra la unión de bucles anidados, Oracle accederá a la tabla con un escaneo de rango de índice. El optimizador también ha decidido que un análisis completo rápido de índice en una unión hash puede ser otro plan de ejecución a considerar. Antes de que comience la ejecución de la instrucción SQL, Optimizer tiene dos planes. Un plan es el predeterminado plan y el otro plan es el adaptativo plan. Oracle observará la ejecución de la instrucción SQL a medida que comienza a ejecutarse con el plan predeterminado. Si Oracle determina que este es el plan de ejecución incorrecto, puede cambiar al plan adaptativo sobre la marcha.

Para obtener más información sobre los planes adaptables, consulte este documento técnico de Oracle. Las páginas 3 a 5 ilustran los planes de unión adaptable en acción.

El texto gris en el Plan de explicación anterior es simplemente el plan de adaptación. SQL Developer 4.1 muestra tanto el plan predeterminado como el plan adaptable.

Más abajo en el plan de explicación está la sección Otro XML, que se puede ver a continuación. Podemos ver que mi versión de db es 12.1.0.2. También podemos que el tipo de información muestre que se trata de un plan adaptativo.

Tenga en cuenta la sección titulada "filas". Podemos ver cada fila del plan de explicación. Aquellas líneas donde “skp=0” son parte del plan por defecto. Las líneas donde "skp=1" son el plan adaptable, que ahora sabemos que aparecen como texto gris en SQL Developers.