Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Explain de un package

Estas en el tema de Explain de un package en el foro de Oracle en Foros del Web. Buenas, como puedo hacer un explain de un package, pera ir viendo porque esta tan lento o si algo me arroja FULL. y ademas si ...
  #1 (permalink)  
Antiguo 26/12/2007, 17:22
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 22 años, 4 meses
Puntos: 0
Explain de un package

Buenas,

como puedo hacer un explain de un package, pera ir viendo porque esta tan lento o si algo me arroja FULL.
y ademas si alguien tiene informacion de como poder optimizar estas consultas..

agradeceré esta informacion..


tengo oracle 10g y uso SQL Navigator como cliente.

Saludos.
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
  #2 (permalink)  
Antiguo 27/12/2007, 02:12
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Re: Explain de un package

Hay muchas maneras de hacerlo.
Oracle tiene un paquete que es para lo que tu dices, te dice las select mas costosas,las veces que se ejecuta, etc etc etc. Lo que pasa es que ahora no recuerdo el nombre , pregunta a tus DBA's porque ese paquete no se crea por defecto cuando se crea la BBDD, hay que crearlo aparte.

También puedes activar una traza a esa sesión, ejecutas el paquete y el TRC que te genera, lo formateas a TXT con el TKPROF y miras los resultados. Lo que pasa es que para un profano en la materia, es dificil entender lo que te sale : lecturas / escrituras en disco, tiempo de la query, etc etc etc

Tambien puedes poner diversos DBMS_OUTPUT.PUT_LINE a lo largo del paquete.........

Habla con tus DBA's a ver como se puede hacer.
  #3 (permalink)  
Antiguo 27/12/2007, 11:10
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Explain de un package

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
  #4 (permalink)  
Antiguo 27/12/2007, 11:35
Avatar de bhonox  
Fecha de Ingreso: julio-2002
Ubicación: Rengo-Viña del Mar-Stgo
Mensajes: 1.213
Antigüedad: 22 años, 4 meses
Puntos: 0
Re: Explain de un package

genial, gracias !!!

voy a investigar del tema y a probar..

saludos
__________________
Atte
Real BHONOX

Programador Cervecero! :borracho:
Lenguajes vengan a MI!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:11.