La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Herramientas de Oracle para realizar Tuning de Sentencias SQL

Presentaciones similares


Presentación del tema: "Herramientas de Oracle para realizar Tuning de Sentencias SQL"— Transcripción de la presentación:

1 Herramientas de Oracle para realizar Tuning de Sentencias SQL
(cont.)

2 Ejemplo 1: EXPLAIN PLAN SET STATEMENT_ID = 'P1' FOR SELECT * FROM empleado; Se generan 2 registros en la tabla plan_table con id=0 e id=1:

3 <info type='plan_hash'> 3982109234 </info> </remark>
id STATEMENT_ID TIMESTAMP REMARKS P1 22/08/05 1 <remark> <info type='plan_hash'> </info> </remark>

4 SELECT STATEMENT 1 TABLE ACCESS FULL FJMORENO id OPERATION OPTIONS
OBJECT_OWNER SELECT STATEMENT 1 TABLE ACCESS FULL FJMORENO

5 id OBJECT_NAME OBJECT_INSTANCE OBJECT_TYPE 1 EMPLEADO TABLE

6 id OPTIMIZER ID PARENT_ID ALL_ROWS 1 ANALYZED

7 id POSITION OTHER OTHER_TAG 2 1

8 id COST CARDINALITY BYTES 2 1 26

9 Ejemplo 2: EXPLAIN PLAN SET STATEMENT_ID = 'P1' FOR SELECT * FROM dept, emp WHERE emp.depto=dept.deptno; Se generan 5 registros en la tabla plan_table con id=0,1,2,3 y 4:

10 P1 22/08/05 1 2 3 4 id STATEMENT_ID TIMESTAMP REMARKS
P1 22/08/05 1 <remark><info type='plan_hash'> </info></remark> 2 <remark><info type='plan_hash'> </info><info type='dynamic_sampling'> yes</info></remark> 3 <remark>… </remark> 4 <remark>… <remark>

11 SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS FULL FJMORENO 3
id OPERATION OPTIONS OBJECT_OWNER SELECT STATEMENT 1 NESTED LOOPS 2 TABLE ACCESS FULL FJMORENO 3 BY INDEX ROWID 4 INDEX UNIQUE_SCAN

12 1 2 EMP TABLE 3 DEPT 4 SYS_C0012360 INDEX (UNIQUE) id OBJECT_NAME
OBJECT_INSTANCE OBJECT_TYPE 1 2 EMP TABLE 3 DEPT 4 SYS_C INDEX (UNIQUE)

13 id OPTIMIZER ID PARENT_ID ALL_ROWS 1 2 3 4

14 id POSITION OTHER OTHER_TAG 6 1 2 3 4

15 id COST CARDINALITY BYTES 6 3 243 1 2 186 19 4 --

16 Visualmente se puede observar así:
QUERY_PLAN NESTED LOOPS TABLE ACCESS FULL EMP TABLE ACCESS BY INDEX ROWID DEPT INDEX UNIQUE SCAN SYS_C A continuación se explican las operaciones más frecuentes que se presentan en un Explain Plan y la forma de obtener e interpretar su visualización

17 EXPLAIN PLAN (cont.) El costo estimado total está dado por el primer paso de la consulta Para que el optimizador realice una mejor toma de decisiones es importante realizar un análisis del contenido de los datos de las tablas (ver comando ANALYZE más adelante)

18 EXPLAIN PLAN Luego de conocer que información queda almacenada en la tabla del PLAN_TABLE, es necesario saber, que operaciones se pueden observar allí Las operaciones se clasifican como: - Row: Ejecutan una fila a la vez, el usuario puede ver el primer resultado antes de que la última fila sea recuperada. Útiles para una aplicación online - Set: Ejecuta sobre un conjunto de filas. Los resultados solo pueden verse hasta cuando el conjunto ha sido procesado completamente. Útiles para aplicaciones en batch

19 EXPLAIN PLAN Ejemplo: Un join puede ser realizado mediante el método
Nested Loops (que es de tipo row) o mediante un Merge (que es de tipo set).

20 Operación AND entre dos o más columnas con un índice no único.
Set o Row Uso AND-EQUAL row Operación AND entre dos o más columnas con un índice no único. CONCATENATION Operación OR o IN (lista de valores) CONNECT BY row/set Operación CONNECT BY COUNT set Operación SELECT ROWNUM COUNT STOPKEY ROWNUM <= constante

21 FILTER row Una condición realizada sobre filas que son retornadas por una operación de conjunto (tal como HAVING) FOR UPDATE Cuando se usa la cláusula FOR UPDATE (bloqueo de filas) HASH JOIN set Método de join basado en hashing. Variantes: Anti, Semi. INDEX FULL SCAN ORDER BY sobre una columna indexada INDEX RANGE SCAN Operaciones BETWEEN, LIKE ‘A%’, >,<,>=,<= etc.

22 INDEX UNIQUE SCAN row Búsqueda sobre todas las columnas de un índice único. INTERSECTION set Operación INTERSECTION MERGE JOIN Un método de join usado normalmente cuando las tablas no tienen índices sobre las columnas de join. Variantes: Outer, Anti,Semi. MINUS Operación MINUS NESTED LOOPS Método de join usado cuando al menos una de las tablas tiene un índice sobre una de las columnas de join.

23 OUTER JOIN row Un join NESTED LOOPS con una expression outer join (+) PROJECTION Una proyección de atributos producida por una operación UNION, MINUS o INTERSECTION REMOTE row/set Una operación que involucra Database Links SEQUENCE Uso de una secuencia: Sequence.NEXTVAL SORT AGGREGATE set Operación de agregación SUM, AVG, MAX, COUNT etc.

24 SORT GROUP BY set Cláusula GROUP BY SORT JOIN Una operación resultado de un MERGE JOIN SORT ORDER BY Cláusula ORDER BY SORT UNIQUE Cláusula DISTINCT o resultado de una operación UNION TABLE ACCESS BY ROWID row Acceso a una tabla vía un índice o con un ROWID explícito

25 TABLE ACCESS CLUSTER row Acceso a una tabla en cluster usando la clave del cluster TABLE ACCESS FULL Acceso a una tabla cuando las condiciones no pueden ser aplicadas sobre columnas indexadas TABLE ACCESS HASH Acceso a un hash cluster usando la clave Hash UNION Operación UNION (elimina duplicados) UNION-ALL Operación UNION-ALL (no elimina duplicados)

26 VIEW set Subconsulta correlacionada o cuando una vista es forzada a ejecutarse antes de que la consulta sea resuelta. MINUS Operación MINUS

27 EXPLAIN PLAN ¿Cómo generar el EXPLAIN PLAN?
El plan de ejecución se genera a partir del comando EXPLAIN PLAN. La sintaxis es: EXPLAIN PLAN [SET STATEMENT_ID = 'id_de_sentencia'] [INTO nombre_tabla] FOR sentencia_sql Observemos un ejemplo:

28 EXPLAIN PLAN ¿Cómo generar el EXPLAIN PLAN?
EXPLAIN PLAN SET STATEMENT_ID = 'prueba' FOR SELECT nombre, ciudad, departamento FROM compania WHERE ciudad = 'medellin' AND departamento = 'antioquia'; Nota: El único resultado que muestra Oracle luego de ejecutar el comando será: Statement Processed (O “Explicado”), ya que los resultados se guardan en la tabla PLAN_TABLE vista anteriormente.

29 EXPLAIN PLAN ¿Cómo obtener el EXPLAIN PLAN?
Para obtener los resultados del EXPLAIN PLAN, se puede realizar una consulta SQL en SQL*Plus sobre la tabla PLAN_TABLE. Para el caso anterior se tiene: SELECT LPAD(' ',2*LEVEL) || OPERATION || ' ' || OPTIONS || ' ' || OBJECT_NAME AS query_plan FROM PLAN_TABLE WHERE STATEMENT_ID = 'prueba' CONNECT BY PRIOR ID = PARENT_ID START WITH ID = 1;

30 Resultado: QUERY_PLAN TABLE ACCESS FULL COMPANIA


Descargar ppt "Herramientas de Oracle para realizar Tuning de Sentencias SQL"

Presentaciones similares


Anuncios Google