¿Alguien puede explicar un poco sobre el plan de explicación y cómo se obtiene el plan de explicación para una consulta? Además, si hay algún script sql que se pueda utilizar como utilidad para esto, sería genial.
¿Alguien puede explicar un poco sobre el plan de explicación y cómo se obtiene el plan de explicación para una consulta? Además, si hay algún script sql que se pueda utilizar como utilidad para esto, sería genial.
Respuestas:
Puede usar el paquete DBMS_XPLAN :
SQL> explain plan for select * from dual;
Explained
SQL> select * from table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 2 | 2 |
| 1 | TABLE ACCESS FULL | DUAL | 1 | 2 | 2 |
--------------------------------------------------------------------
Note: cpu costing is off
La instrucción EXPLAIN PLAN muestra los planes de ejecución elegidos por el optimizador para las instrucciones SELECT, UPDATE, INSERT y DELETE. Un plan de ejecución de la declaración es la secuencia de operaciones que realiza la base de datos para ejecutar la declaración.
EXPLAIN PLAN FOR ...
Reemplace el ... con su instrucción SQL. Después de ejecutar esto, ejecute lo siguiente para ver el plan:
SELECT * FROM table(dbms_xplan.display);
Para obtener más información, consulte las secciones Descripción general o Uso en la Guía de ajuste de rendimiento de Oracle 11g.
Esta es una pregunta muy común, así que decidí convertir esta respuesta en un artículo .
El optimizador genera el plan de ejecución estimado sin ejecutar la consulta SQL. Puede generar el plan de ejecución estimado desde cualquier cliente SQL usando EXPLAIN PLAN FOR o puede usar Oracle SQL Developer para esta tarea.
Al usar Oracle, si antepone el EXPLAIN PLAN FOR
comando a una consulta SQL dada, la base de datos almacenará el plan de ejecución estimado en el asociado PLAN_TABLE
:
EXPLAIN PLAN FOR
SELECT p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Para ver el plan de ejecución estimado, debe usar DBMS_XPLAN.DISPLAY
, como se ilustra en el siguiente ejemplo:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'))
La opción de formato ALL + OUTLINE le permite obtener más detalles sobre el plan de ejecución estimado que utilizar la opción de formato predeterminada.
Si ha instalado SQL Developer, puede obtener fácilmente el plan de ejecución estimado para cualquier consulta SQL sin tener que anteponer el comando EXPLAIN PLAN FOR:
El optimizador genera el plan de ejecución SQL real cuando ejecuta la consulta SQL. Entonces, a diferencia del Plan de ejecución estimado, debe ejecutar la consulta SQL para obtener su plan de ejecución real.
El plan real no debe diferir significativamente del estimado, siempre que la base de datos relacional subyacente haya recopilado adecuadamente las estadísticas de la tabla.
Para indicar a Oracle que almacene el plan de ejecución real para una consulta SQL dada, puede usar la GATHER_PLAN_STATISTICS
sugerencia de consulta:
SELECT /*+ GATHER_PLAN_STATISTICS */
p.id
FROM post p
WHERE EXISTS (
SELECT 1
FROM post_comment pc
WHERE
pc.post_id = p.id AND
pc.review = 'Bingo'
)
ORDER BY p.title
OFFSET 20 ROWS
FETCH NEXT 10 ROWS ONLY
Para visualizar el plan de ejecución real, puede usar DBMS_XPLAN.DISPLAY_CURSOR
:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'))
Si desea obtener los planes de ejecución para todas las consultas generadas dentro de una sesión determinada, puede establecer la configuración de la STATISTICS_LEVEL
sesión en ALL:
ALTER SESSION SET STATISTICS_LEVEL='ALL'
Esto tendrá el mismo efecto que configurar la GATHER_PLAN_STATISTICS
sugerencia de consulta en cada consulta de ejecución. Entonces, al igual que con la GATHER_PLAN_STATISTICS
sugerencia de consulta, puede usar DBMS_XPLAN.DISPLAY_CURSOR
para ver el plan de ejecución real.
Debe restablecer la
STATISTICS_LEVEL
configuración al modo predeterminado una vez que haya terminado de recopilar los planes de ejecución que le interesaban. Esto es muy importante, especialmente si está utilizando la agrupación de conexiones y las conexiones de la base de datos se reutilizan.ALTER SESSION SET STATISTICS_LEVEL='TYPICAL'