EXPLAIN PLAN ¿Cómo obtener el EXPLAIN PLAN?

Slides:



Advertisements
Presentaciones similares
INTELIGENCIA ARTIFICIAL
Advertisements

Sección 4 Gastos Generales
SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
integridad referencial
Rocío Contreras Águila Primer Semestre 2010
Optimización del rendimiento de las consultas
Supervisión del rendimiento de SQL Server
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:23 PRESENTACION: BASE DE DATOS ALUMNAS: Velazquez Corona Elsa Ponciano Antonio.
Análisis de reportes administrativos
BASES DE DATOS.
Maestría en Bioinformática Bases de Datos y Sistemas de Información Nociones de p erformance Ing. Alfonso Vicente, PMP
Aprendizaje de Microsoft® Access® 2010
Access Bases de datos.
¿QUÉ SON LAS BASES DE DATOS?
Mejoras a la Cláusula GROUP BY
DIAGRAMAS DE FLUJO Y PSEUDOCÓDIGO
SISTEMA DE NACIMIENTOS MANUAL DEL USUARIO. El objetivo del presente manual es servir de guía al usuario final para interactuar con el Sistema, permitiéndole.
ACCESO A BASES DE DATOS ORACLE CON PHP
Maestría en Bioinformática Bases de Datos y Sistemas de Información Fundamentos de Matemática Ing. Alfonso Vicente, PMP
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
COMPUTER DATA SYSTEMS.
Windows XP sp3.
Base de Datos Relacional.
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
PL/SQL Francisco Moreno Universidad Nacional.
Acceso a datos con ADO.NET
TRADUCTOR DE UN PROGRAMA
Como empezar en Access 2000 Abrir Access 2000 Pulsamos INICIO
DR. ERNESTO SUAREZ.
UNIDAD 2:Crear, abrir y cerrar una base de datos Hacer clic sobre la opción Nuevo de la pestaña Archivo. Se mostrarán las distintas opciones para nuevos.
D Copyright © 2010, Oracle y/o sus filiales. Todos los derechos reservados. Uso de SQL*Plus.
Subconsultas Avanzadas
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
Una base de datos es un “almacén” que nos permite guardar grandes cantidades de información de forma organizada para que luego podamos encontrar y utilizar.
Bases de Datos Oracle Optimización
Mayo de 2009Dos Ideas - La visión de Sistemas desde el Desarrollo Manipulación de Datos Conceptos básicos.
Datos a considerar: Las lectoras tiene memoria cache. Lo que significa que pueden almacenar datos aun estando fuera de línea. El programa se conecta a.
CAPITULO 4 Despliegue de Datos Desde Múltiples Tablas
EXPLAIN PLAN Cómo leer los resultados del EXPLAIN PLAN
SQL Trace y TKPROF Aunque el EXPLAIN PLAN es una herramienta útil, posee limitantes. Por ejemplo, no da o da poca información sobre los recursos empleados.
LENGUAJE SQL.
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 14 Uso de Operadores de Conjuntos.
Tecnologías para el Aprendizaje
Bases de Datos en Excel Microsoft Excel aporta al usuario la posibilidad de trabajar con tablas de información: nombres, direcciones, teléfonos, zonas,
Especialista en Business Intelligence Integration Services SSIS Transformaciones (Parte 4) Microsoft SQL Server 2008 R2.
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
PROCEDIMIENTOS ALMACENADOS Es una consulta almacenada en la base de datos en un servidor. Los P.A. Mejoran el Rendimiento Disminuyen el tráfico. Los P.A.
COLEGIO DE BACHILLERES “XOCHIMILCO TEPEPAN” Nº13  Tecnologías de la Información y comunicación 3.  Profa. Gabriela Pichardo Lazardo EQUIPO 25  Emmanuel.
Metodología de la programación
Sistemas de Archivos Sistemas Operativos.  Se debe proporcionar un almacenamiento secundario que respalda a la memoria principal  El Sistema de archivos.
Introducción a la Optimización de Consultas. Francisco Moreno.
Se producen cuando una aplicación recibe datos no confiables y estos no han sido validados adecuadamente antes de procesarlos, lo cual puede llevar a que.
SHUTTENBORG ACCESS CONOCE LOS PROGRAMAS. Cortés Gamboa Lizzeth
 La sentencia SELECT recupera todas las columnas o un subconjunto de ellas de una tabla. Esto afecta a todas las filas de la tabla, a menos que especifiquemos.
Laboratorio de optimización de BD
1
Utilizar Costo Promedio Ponderado en el Software Administrativo SAW
SQL (Structured Query Language) Lenguaje orientado a bases de datos y sobre todo, al manejo de consultas; el objetivo principal de SQL es la realización.
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
MSSQL SERVER CURSO BÁSICO 1. CONCEPTOS BASICOS DE SQL. DESCRIPCIÓN DEL CURSO. Sesión 3: Índices Uso, Creación, Tipos, Eliminación LENGUAJE DE CONSULTAS.
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
HINTS ¿Cómo afectar el plan de ejecución? Por defecto, el SGBD tomará en cuenta el camino de ejecución (Execution Path) determinado por el optimizador.
Bases de Datos y Sistemas de Gestión de Bases Relacionales.
En el presente trabajo, se explica los diferentes elementos que nos ofrece Microsoft Access, para hacer mas fácil y rápido la realización de bases de.
¿Qué es una base de datos? Una base de datos se puede definir como un conjunto de información relacionada que se encuentra agrupada ó estructurada. Desde.
Para cada uno de los atributos, indicaremos su campo de descripción. Cuando un campo no dispone de este (como el.
DLM Transact SQL Sesión I Introducción al SQL Server Uso de las herramientas de consultas del Transact SQL.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
DML Transact SQL Sesión VI Trabajando con subconsultas.
Transcripción de la presentación:

EXPLAIN PLAN ¿Cómo obtener el EXPLAIN PLAN? Aunque el proceso mostrado es simple, es recomendable utilizar herramientas de “terceros” las cuales facilitan aun más el trabajo. De hecho los planes de ejecución generados por terceros son más ilustrativos que los generados por Oracle. Observemos a continuación un ejemplo de un EXPLAN PLAN generado por la herramienta JDeveloper de Oracle.

EXPLAIN PLAN Uso de un hint, se verán posteriormente… Podemos observar que los resultados obtenidos con esta herramienta, son más amigables que los obtenidos mediante SQL*Plus.

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Interpretar un plan de ejecución, generalmente requiere práctica. A pesar de esto, he aquí algunas pautas generales que ayudan a interpretarlo. Mientras más indentado se encuentre un ruta de acceso (access path), más tempranamente se ejecuta. Si dos pasos están indentados a un mismo nivel, la sentencia que se encuentre más arriba se ejecutará primero. Observemos un ejemplo:

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Supongamos la consulta: SELECT nombre, ciudad, departamento FROM compania WHERE ciudad = 'medellin' AND departamento = 'antioquia';

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Un plan de ejecución posible, podría ser el siguiente: query_plan -------------------------------------------- TABLE ACCES COMPANIA BY ROWID AND-EQUAL INDEX RANGE SCAN COMPANIA$CIUDAD INDEX RANGE SCAN COMPANIA$DEPARTAMENTO

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Siguiendo las pautas observadas, se puede decir lo siguiente sobre este plan de ejecución: 1. Los accesos más indentados son los INDEX RANGE SCAN y como se encuentran al mismo nivel, entonces el primero que se ejecutará será: INDEX RANGE SCAN COMPANIA$CIUDAD 2. Y luego: INDEX RANGE SCAN COMPANIA$DEPARTAMENTO

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? 3. Luego, se tiene que los resultados de ambas operaciones, le suministraran información a la operación AND_EQUAL. 4. AND_EQUAL a su vez, le entregará información a la operación TABLE ACCES COMPANIA BY ROWID En algunas ocasiones, es necesario tener en cuenta otros factores a la hora de interpretar un plan de ejecución. Observemos otro ejemplo

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Observemos el siguiente plan de ejecución: query_plan ------------------------------------------------- SELECT STATEMENT SORT ORDER BY NESTED LOOPS TABLE ACCESS FULL CLIENTE TABLE ACCESS BY ROWID EMPLEADOS INDEX RANGE SCAN EMPLEADO_NOMBRES_IDX

INDEX RANGE SCAN EMPLEADO_NOMBRES_IDX TABLE ACCESS BY ROWID EMPLEADOS EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Una ruta de acceso puede estar compuesta por varios pasos en el plan de ejecución. Si observamos detenidamente el resultado del EXPLAIN PLAN anterior y siguiendo las dos pautas antes mencionadas se podría pensar que lo primero que se ejecuta sería: INDEX RANGE SCAN EMPLEADO_NOMBRES_IDX Sin embargo, esta instrucción hace parte, o mejor dicho, se ejecuta de manera conjunta con la instrucción: TABLE ACCESS BY ROWID EMPLEADOS

TABLE ACCESS FULL CLIENTE EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Por consiguiente al ser una operación conjunta, esta se tomará como un grupo, es decir, como una sola operación. 1. Por lo tanto, la primera operación a ejecutarse será: TABLE ACCESS FULL CLIENTE Ya que se encuentra al mismo nivel que la operación conjunta formada por: TABLE ACCESS BY ROWID EMPLEADOS INDEX RANGE SCAN EMPLEADO_NOMBRES_IDX

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? Luego de haber entendido lo anterior, los pasos en los que se ejecutará la consulta son: SELECT STATEMENT 4 SORT ORDER BY 3 NESTED LOOPS 1 TABLE ACCESS FULL CLIENTE 2 TABLE ACCESS BY ROWID EMPLEADOS INDEX RANGE SCAN EMPLEADO_NOMBRES_IDX Miremos ahora un último ejemplo:

EXPLAIN PLAN ¿Cómo leer el resultado del EXPLAIN PLAN? query_plan --------------------------------------------- PROJECTION SORT UNIQUE UNION MERGE JOIN SORT JOIN TABLE ACCESS FULL COMPANIA TABLE ACCESS FULL VENTAS TABLE ACCESS BY ROWID COMPETIDOR INDEX UNIQUE SCAN COMPETIDOR_PK

Costo - Cardinalidad - Bytes EXPLAIN PLAN Otros Aspectos acerca del EXPLAIN PLAN Como se observó, el EXPLAIN PLAN ofrece información que puede ser de utilidad a la hora de obtener una idea del rendimiento de la consulta ejecutada. Dichos datos provienen de las columnas de la tabla del EXPLAIN PLAN y son: Costo - Cardinalidad - Bytes Sin embargo, estos simplemente dan una idea superficial de que es lo que ocurre al ejecutar una sentencia, por lo tanto es necesario apoyarse en otras herramientas (que se verán a continuación) para formarse una mejor idea sobre el rendimiento de una consulta.

SQL TRACE Y TKPROF Aunque el EXPLAIN PLAN es una herramienta útil, posee limitantes que hacen que sea un instrumento incompleto para la toma de decisiones acerca de los planes de ejecución Por ejemplo, no es posible determinar adecuadamente entre dos planes de ejecución, cual es más eficiente, por ello se puede acudir a otras dos herramientas: el SQL TRACE y TKPROF Con estas herramientas se puede obtener información acerca de los recursos utilizados por el sistema (memoria, CPU, etc.), tiempos de “parsing”, de recuperación de registros y de ejecución

SQL TRACE Y TKPROF SQL TRACE El SQL TRACE es una herramienta que permite rastrear las sentencias SQL ejecutadas dentro de una sesión o instancia, almacenándolas dentro de un archivo específico*. En este archivo se guardan varios elementos interesantes, tales como: tiempos de CPU, de entradas y salidas de disco, parsing, procesamiento de registros etc. * Generalmente, estos archivos de rastreo tienen extensión trc

SQL TRACE Y TKPROF SQL TRACE El archivo generado por el SQL TRACE es básicamente, imposible de interpretar directamente. Esto se puede comprobar abriendo el archivo con cualquier editor de texto plano. Ejemplo:

SQL TRACE Y TKPROF SQL TRACE Debido a que la salida del archivo de rastreo es prácticamente ilegible, se debe utilizar una herramienta de formateo que toma como entrada, el archivo de rastreo y va a generar un archivo con información comprensible y fácil de interpretar que se espera conlleve a la toma de buenas decisiones. Esta herramienta de formateo (proporcionada también por Oracle) es conocida como TKPROF

Pasos a Seguir, para utilizar SQL TRACE y TKPROF: 1. Habilitar el SQL TRACE, para instancias o sesiones 2. Localizar los archivos de rastreo de interés 3. Usar el TKPROF para formatear 4. Interpretar los resultados 5. Optimizar la consulta y repetir el proceso si es necesario A continuación se explica en detalle cada uno de los pasos que componen este proceso:

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 1. Habilitar el SQL TRACE, para instancias o sesiones Para Habilitar el rastreo de las sentencias de interés, se ejecuta el siguiente comando desde SQLPLUS: ALTER SESSION SET SQL_TRACE = TRUE; Para activarlo desde PL/SQL, se debe utilizar: DBMS_SESSION.SET_SQL_TRACE(TRUE);

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 2. Localizar los archivos de rastreo de interés Teniendo ya habilitado el SQL TRACE, el siguiente paso es la búsqueda del archivo generado por el mismo. Estos archivos de rastreo (.trc) son guardados generalmente en la ruta que tiene por defecto el parámetro de configuración: user_dump_dest El nombre de los archivos generados por la herramienta, posee la siguiente sintaxis: header_pid.trc Donde header es generalmente “ORA”, “Oracle_SID_ORA” u “SID_ORA” y el PID es el identificador que Oracle asigna a este proceso.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 2. Localizar los archivos de rastreo de interés (cont.) Para hallar la ruta donde se encuentran los archivos de rastreo, se puede ejecutar la siguiente consulta: SELECT value FROM v$parameter WHERE name = 'user_dump_dest';

ALTER SYSTEM SET user_dump_dest = 'ruta_de_directorio'; SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 2. Localizar los archivos de rastreo de interés (cont.) Para encontrar un archivo de rastreo específico, es necesario conocer cual fue el PID que Oracle asignó a este proceso. Esto se puede averiguar mediante la siguiente consulta: SELECT spid FROM sys.v_$process WHERE addr = ( SELECT paddr FROM sys.v_$session WHERE audsid = userenv('sessionid') ); Sin embargo, si se quiere personalizar el directorio donde se guardarán los archivos de rastreo, se puede hacer lo siguiente: ALTER SYSTEM SET user_dump_dest = 'ruta_de_directorio'; Nota: el cambio de este parámetro debe realizarse antes de habilitar el rastreo de sentencias.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 3. Usar el TKPROF para formatear Una vez se encuentra el archivo de rastreo requerido, se utiliza la herramienta TKPROF para transformarlo en una forma interpretable. La sintaxis es: tkprof trace_file output_file [explain=username/password] sort(sort options)] TKPROF, se ejecuta por fuera del entorno de SQLPLUS, es decir, en una línea de comandos del sistema operativo. A continuación se muestran las diferentes opciones de los parámetros de configuración.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 3. Usar el TKPROF para formatear trace_file Es el nombre del archivo generado por SQL_TRACE Output_file Es el nombre del archivo en el cual quedará la información relevante explain=username/password Especifica la conexión, la cual será utilizada para generar los planes de ejecución SQL. Sort=(sort keys) Muestra las sentencias SQL en valores descendientes de acuerdo a las claves de ordenamiento elegidas, estas son parsing (prc), ejecución (.exe), recuperación (fch).

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 3. Usar el TKPROF para formatear Funciones del ordenamiento del TKPROF: Cada clave de ordenamiento, se compone de 2 partes, la primera indica el tipo de llamada y la segunda parte, los valores a ser ordenados. A continuación se presenta una tabla completa acerca de las opciones de ordenamiento del TKPROF.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 3. Usar el TKPROF para formatear prs Ordena sobre valores en el momento de parsing. cnt Ordena sobre el número de llamadas exe Ordena sobre valores durante llamadas de ejecución cpu Ordena por el consumo de CPU. fch Ordena sobre valores durante llamadas a fetch. ela Ordena sobre tiempo transcurrido dsk Ordena sobre lecturas de disco qry Ordena sobre lecturas consistentes. cu Ordena sobre lecturas actuales mis Ordenamiento sobre fallos en la cache de la biblioteca., aplica solo a parsing y ejecución. row Ordena sobre filas procesadas. Aplica solo a exe y fch.

Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 3. Usar el TKPROF para formatear Ejemplo: Exedsk: Indica que las sentencias son ordenadas en el archivo de salida de acuerdo a las lecturas de disco durante la ejecución.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. Estadísticas tabuladas: TKPROF lista las estadísticas en filas y columnas para una sentencia SQL. Cada fila corresponde a uno de los 3 pasos del procesamiento del SQL: PARSE: Este paso traduce la sentencia SQL en un plan de ejecución, chequeo de existencia de objetos, permisos etc. EXECUTE: Este paso es la ejecución real de la sentencia. Para las sentencias INSERT, UPDATE, y DELETE, este paso modifica los datos. Para las sentencias SELECT, el paso identifica las filas seleccionadas. FETCH: Este paso trae las filas retornadas por una consulta. Estos “fetches” solo se realizan para sentencias SELECT

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. Las otras columnas de la herramienta TKPROF son estadísticas combinadas de todos los “parsings”, ejecuciones y “fetches” de una sentencia. La suma de las columnas de los totales de query y current es el número total de bloques leídos. A continuación se presenta el significado de las columnas.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. COUNT: Número de veces que a una sentencia se le realizó parsing, ejecución o fetching. CPU: Tiempo total de CPU en segundos para las llamadas de parsing, ejecución y fetch. ELAPSED: Tiempo total transcurrido para todas las llamadas de parsing, fetch y ejecuciones de la sentencia. DISK: Número total de Bloques de datos leídos físicamente de los archivos de datos en el disco para las llamadas de parsing, ejecución y fetch. QUERY: Número total de buffers traídos en modo consistente para todas las llamadas de parsing, fetch y ejecuciones de la sentencia. (los buffers se traen en modo consistente para las consultas).

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. CURRENT: Número total de buffers traídos en modo current para todas las llamadas de parsing, fetch y ejecuciones de las sentencias que implican modificacines sobre tablas (UPDATE, DELETE, e INSERT). Rows: Las estadísticas acerca de las filas procesadas, aparecen en esta columna. El número total no incluye las filas procesadas por las subconsultas de la sentencia SQL. Para las sentencias SELECT, el número de filas retornadas aparece para cada uno de los pasos de fetch. Para las sentencias UPDATE, DELETE, e INSERT, el número de filas procesadas aparece por cada paso de ejecución.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. Los Resultados del TKPROF, se encuentran tabulados y cada valor, como se vio, tiene su propio significado. Observemos detenidamente la salida del TKPROF, y a través de este, se podrá decidir acerca de la eficiencia de una consulta SQL específica. Esto lo se hará observando algunas tasas puntuales derivadas de esta salida. Observemos con detenimiento los elementos de la salida del TKPROF

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. call count cpu elapsed disk query current rows --------- ------- ------ ------- ------ ------ -------- ------ Parse(a) (d) -- -- -- -- -- -- Execute(b) (e) -- -- -- -- -- -- Fetch(c) (j) -- -- -- -- -- (i) Total --- -- -- (k) (f) (g) (h) Luego de observar los elementos importantes en la salida del TKPROF, se pasa a analizar las tasas que ayudarán a determinar, que consultas SQL necesitan ser optimizadas.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF 4. Interpretación los resultados. Tasas de Importancia 1. Bloques leídos (f+g) a filas procesadas (h). Esto indica de una manera general, el costo relativo de la consulta. Mientras más bloques tienen que ser accedidos en relación a las filas retornadas, la fila traída será mucho más costosa. Una relación similar se puede deducir sobre la tasa de bloques leídos sobre ejecuciones (f+g)/e. Tasas por encima de 10 o 20, pueden indicar alguna posibilidad de optimización en este campo.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Tasas de Importancia 2. Parsing (d), sobre ejecución (e). Idealmente, el conteo de parsing debe ser cercano a uno. Si este valor es alto en relación al conteo de ejecuciones, la sentencia entonces ha sido parseada varias veces sin necesidad. 3. Filas traidas (i) sobre traidas (j) (Rows Fetched over fetches). Esto indica el nivel en el cual, la capacidad del array fetch ha sido utilizada. Una tasa cercana a uno, indica que no hubo procesamiento a través de arrays, lo que significa que existe una buena oportunidad para optimizar.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Tasas de Importancia 4. Lecturas de Disco (k) a lecturas lógicas. (f+g). Esto es una medida de la tasa de error (miss rate) dentro del buffer de datos en la cache. Generalmente se busca que esta tasa no represente más de un 10% Ahora se observará un ejemplo específico que mostrará como se puede utilizar el TKPROF como herramienta eficaz de análisis y optimización.

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Supongamos que se tiene la siguiente consulta SQL: SELECT e.apellido, e.nombre, e.fecha_nacimiento FROM empleados e WHERE EXISTS (SELECT cod FROM clientes c WHERE e.apellido = apellido_contacto AND e.nombre = c.apellido_nombre AND e.fecha_nacimiento = c.fecha_nacimiento) ORDER BY e.apellido, e.nombre; Ahora observemos cual es la salida respectiva del TKPROF

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) call count cpu elapsed disk query current rows --------- ------- ------ ------- ------ ------ -------- ------ Parse 1 0 0.43 0 0 0 0 Execute 1 0 0.00 0 0 0 0 Fetch 11 0 323.74 204161 212083 2400 151 --------- ------- ------ ------- ------ ------ -------- ------ Total 13 0 324.17 204161 212083 2400 151 Misses in library cache during parse: 0 Optimizer Hint: RULE Rows Execution Plan ------- --------------------------------------------- 0 SELECT STATEMENT 800 FILTER 800 TABLE ACCESS (BY ROWID) OF 'EMPLEADOS‘ 801 INDEX (RANGE SCAN) OF 'INDICE_EMPLEADOS_NOMAP' 4109475 TABLE ACCESS FULL OF 'CLIENTES'

SQL TRACE Y TKPROF (f+g) / h Entre 10 y 20 1420 aprox. d / e Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Observemos ahora, las tasas analizadas anteriormente para saber si existe campo para optimizar. TASA V. NORMAL V. ENCONTRADO (f+g) / h Entre 10 y 20 1420 aprox. d / e 1 (o cerca de 1) 1 i / j Mientras mayor valor, mejor 13.73 k / (f+g) Menos de 10 95

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Cuando se observa la salida del TKPROF, de manera general, se debe considerar: - ¿Cuán eficiente es la sentencia? (indicado por traídas de bloque por filas retornadas -- (f + g) / h ). - ¿Cómo se trajeron los datos? En otras palabras, ¿qué significa el plan de ejecución? - ¿En qué pasos del plan de ejecución se procesaron la mayor cantidad de filas? ¿cómo se pueden evitar estos pasos?

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Observando las tasas, y el EXPLAIN PLAN de la consulta presentada se tiene que: - La eficiencia de la consulta es bastante pobre. - Se procesaron más de 4 millones de filas en el FULL TABLE SCAN de la tabla clientes. (en el ejemplo, esta tabla solo tiene 5150 filas), por lo que nos indica que este SCAN ha ocurrido más de una vez. Observando el EXPLAIN PLAN nos damos cuenta que por cada fila en ‘empleados’ se realizó el SCAN: (800 * 5150 = 4.12 millones).

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Para corregir esto, se podría utilizar un índice en esta tabla, o redefinir la consulta de manera que sea más eficiente. Se opta por redefinir la consulta así: SELECT e.apellido, e.nombre, e.fecha_nacimiento FROM empleados e, clientes c WHERE e.apellido = apellido_contacto AND e.nombre = c.apellido_nombre AND e.fecha_nacimiento = c.fecha_nacimiento ORDER BY e.apellido, e.nombre; Se ha utilizado un JOIN, que es más eficiente que el EXISTS, observemos ahora la salida del TKPROF

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) call count cpu elapsed disk query current rows --------- ------- ------ ------- ------ ------ -------- ------ Parse 1 0 0.12 0 0 0 0 Execute 2 0 0.96 0 0 1 0 Fetch 11 0 9.82 278 364 370 151 Total 14 0 10.9 278 364 371 151 Misses in library cache during parse: 0 Optimizer Hint: RULE Rows Execution Plan ------ --------------------------------------------- 0 SELECT STATEMENT 151 SORT (ORDER BY) 151 MERGE JOIN 5151 SORT (JOIN) 5151 TABLE ACCESS FULL OF 'CLIENTES' 800 SORT (JOIN) 800 TABLE ACCESS FULL OF 'EMPLEADOS'

SQL TRACE Y TKPROF Pasos a Seguir, a la hora de utilizar SQL TRACE y TKPROF (Interpretación los resultados) Si se observa detenidamente los resultados, ahora solo se hace un TABLE SCAN por cada tabla y la tasa de bloques a fila ( (f + g ) / h) ha bajado a 4.8 (antes 1420). Aunque la tasa de lecturas de disco a lecturas lógicas (k / ( f + g )) también redujo su valor, se muestra que aun hay espacio para mejorarla. Es obvio que este ejemplo se definió para que los resultados de las salidas fueran bastante visibles y se observara detenidamente el proceso de optimización

SQL TRACE Y TKPROF Otra forma de obtener el EXPLAIN PLAN y un reporte alternativo de estadísticas al ya presentado, es mediante el uso en SQL*Plus del comando: SET AUTOTRACE ON Supongamos la consulta: SELECT * FROM emp; La salida que se muestra en SQL*Plus es:

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=ALL_ROWS (Cost=3 Card=4 Bytes=80) 1 0 TABLE ACCESS (FULL) OF 'EMP' (TABLE) (Cost=3 Card=4 Bytes=80) Statistics 0 recursive calls 0 db block gets 8 consistent gets 0 physical reads 0 redo size 656 bytes sent via SQL*Net to client 496 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 4 rows processed