Hola,
Se ha mencionado el TKPROF en algunos post y me parecio buena idea postear un ejemplo.
Creo un procedimiento de prueba, no hace nada especial, pero sirve para el ejemplo, no hay diferencia entre hacer un trace para un procedimiento que para un package.
Código:
SQL> create or replace procedure p1
2 as
3 i number;
4 begin
5 select count(*) into i from dual;
6 dbms_output.put_line(i);
7 end;
8 /
Procedure created.
Antes de generar una traza para una sesion, hay que modificar algunos parametros para asegurarnos un mejor resultado.
1. timed_statistics, habilita la captura de estadisticas de tiempos, cpu, etc.
2. max_dump_file_size, tamaño maximo del fichero de trace, si se llega al maximo Oracle lo truncara.
3. user_dump_dest, directorio donde se genera el fichero de trace.
Código:
SQL> alter session set timed_statistics=true;
Session altered.
SQL> alter session set max_dump_file_size=1024;
Session altered.
SQL> show parameter user_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------------
user_dump_dest string /u01/app/oracle/admin/ORA10/udump
Una vez que tenemos configurado el entorno, podremos poner la sesion en trace, ejecutar el procedimiento, package, funcion, etc y volver a deshabilitar el trace sobre la sesion.
Código:
SQL> alter session set sql_trace=true;
Session altered.
SQL> begin
2 p1;
3 end;
4 /
PL/SQL procedure successfully completed.
SQL> alter session set sql_trace=false;
Session altered.
Finalmente sobre el directorio de trazas, podremos ver el fichero generado con el nombre ora10_ora_2385.trc, al cual le aplico la herramienta de Oracle TKPROF con los siguientes parametros.
1. ora10_ora_2385.trc, fichero de entrada.
2. output.txt, fichero de salida.
3. explain=/, le pido los planes de ejecucion de las consultas SQL y para ello conectarse a la base de datos con /.
4. sys=no, no interpreta las llamadas de sys de Oracle.
Código:
oracle@buo:/u01/app/oracle/admin/ORA10/udump> ls -ltr
total 244
-rw-r----- 1 oracle oinstall 248470 2007-12-30 11:25 ora10_ora_2385.trc
oracle@buo:/u01/app/oracle/admin/ORA10/udump> tkprof ora10_ora_2385.trc output.txt explain=/ sys=no
TKPROF: Release 10.2.0.1.0 - Production on Sun Dec 30 11:27:51 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Por ultimo, miramos el contenido del fichero output.txt, posteo nada mas que una parte, donde se puede ver el plan de ejecucion del SELECT COUNT(*) dentro del procedimiento P1.
Código:
oracle@buo:/u01/app/oracle/admin/ORA10/udump> more output.txt
SELECT COUNT(*)
FROM
DUAL
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 0 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.00 0 0 0 1
Misses in library cache during parse: 1
Optimizer mode: ALL_ROWS
Parsing user id: 31 (ORACLE) (recursive depth: 1)
Rows Execution Plan
------- ---------------------------------------------------
0 SELECT STATEMENT MODE: ALL_ROWS
0 SORT (AGGREGATE)
0 FAST DUAL
********************************************************************************
Muy importante es leer mas sobre el TKPROF, tiene muchas mas opciones y formas de ordenar el fichero de output.
Saludos