Comunidad Oracle Hispana

De regreso al futuro (Back to the future ) Parte I.

Viajando en el Tiempo

Espero que aquellos que pudieron ver la cinta cinematografica tengan un buen recuerdo de esos momentos , es comun que en nuestro trabajo con la base  de datos oracle nos ocurra algo similar a esta pelicula,  y es verificar a traves del tiempo que fue lo que sucedio en un determinado periodo. ( Hojala se pudiera hacer los mismo en la vida real , muchos de nosotros no hubieramos comprado aquello o invitado aquel , etc,etc, etc).

 

Motivos por los cuales queremos ver que sucedio?  quiero revisar  una session en particular o con todas las sessiones que operaban , "El reporte no terminaba" , " La consulta nunca dio resultado", " Deteminar si la cuenta de usuario opero en ese momento" , "el wait time sospecho actuo en ese periodo de tiempo" , " dos sessiones corrieron al mismo tiempo para un trabajo en particular", etc.

 

La base de datos oracle , nos permite realizar la tarea de viajar en el tiempo de diferentes maneras , en esta ocasion quiero desarrollar la mas sencilla a traves de los reportes ya programados de AWR,ASH.  Usualmente dentro de oracle ya viene pre-configurado en la base de datos que cada hora tome metricas de diferentes indicadores  ( Sistema Operativos y Base de datos  con una retencion de 7 dias  una mejor referencia ver el articulo Magia Negra ) ,  a cada punto en el tiempo en que se tomo una imagen de como era el comportamiento de la base de datos se le denomina snapshot.

 

Como veo los datos de mi base de datos

Ejecutar SCRIPT[1]

===============

SQL>alter session set nls_date_format = 'DD-MON-YY HH24:MI:SS';

SQL>Select dBID,begin_interval_time,snap_id
from dba_hist_snapshot
where begin_interval_time between
to_Date('25-JUL-12 08:00:00','DD/MON/YY HH24:MI:SS') and
to_date('26-JUL-12 21:00:00','DD/MON/YY HH24:MI:SS')
order by 2

 

Facilmente se puede visualizar cual es el snap_id que corresponde a cada hora , este valor es sumamente importante para poder determinar cuales son las ventanas de tiempo , que se desea visualizar. veamos en la practica como se utiliza  despues de utilizar el script [1]

procedo a Ejecutar

SQL> SELECT output FROM TABLE( DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT((select dbid from  v$database),  1, 28617, 28620) ) ;

 

Donde es el snap_id  28617  es la hora inicial y 28620 es el snap_id de la hora final ,  los parametros del paquete como ven son muy sencillos

DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT(DBID, 1=instancia,snap_id inicial , snap_id final)

 

tambien puedes ver el resultado en html

DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML ( Mismos parametros)  

 

Este AWR ( Automatic Work Load Repository)  te dara un buen resumen de como estaba la base de datos en memoria, procesos, cargas , bloqueos , parametros ,  eventos de espera, queries corriendo,etc. [ como estaba en una ventana de tiempo todas las sessiones,

ahora que sucede si deseo comparar dos periodos de tiempo ?

 

Ejecutar

SELECT output FROM TABLE(dbms_workload_repository.awr_diff_report_text(
              (select dbid from v$database),
              1,
              ( Select MIN(Snap_id) from dba_hist_snapshot where begin_interval_time >='25-JUL-2012 08:00:00'), 
              ( Select MIN(Snap_id) from dba_hist_snapshot where begin_interval_time >='25-JUL-2012 06:00:00 PM'), 
              (select dbid from v$database),
              1,
              ( Select MIN(Snap_id) from dba_hist_snapshot where begin_interval_time >='26-JUL-2012 08:00:00'), 
              ( Select MIN(Snap_id) from dba_hist_snapshot where begin_interval_time >='26-JUL-2012 06:00:00 PM')
              ));

 

Este reporte es bastante grande y un poco dificil de analizar todo en texto pero  con empeño todo es posible , la misma version en HTML  , mas facil de visualizar se logra con

SELECT output FROM TABLE(dbms_workload_repository.awr_diff_report_html(
              (select dbid from v$database),
              1,
              26722, 
              26734, 
              (select dbid from v$database),
              1,
              26746, 
              26758  ));

 

 

Para aquellos lectores atentos veran que los parametros de snap_id , los obtuve de diferente manera  ambas completamente validas ,  si han tenido la paciencia de leer a este punto , la mejor parte de este episodio es la que sigue.   

Solo quiero ver los queries mas pesados que pasaron en la reciente historia ?

select output from table(dbms_workload_repository.ash_report_text( (select dbid from  v$database),1,sysdate-4/24,Sysdate ));

 

puedo ver en ASH (Automatic Storage History)  que sucedio en las ultimas x horas ,  reporte util para determinar que es un query en especifico el que me esta causando un cuello de botella ,  ahora quiero saber  como se ha comportado ese query en especifico en los ultimos y dias.

SELECT output FROM TABLE(DBMS_WORKLOAD_REPOSITORY.ASH_REPORT_HTML(
(select dbid from v$database),1,sysdate-3,sysdate,
l_sql_id =>  'abcdefghij123' ));

 

Con este material ahora se puede explorar muchas cosas ,

  1.  Puedo automatizar para que me envie por correo  como se comporto la base de datos
  2.  Si se alcanza cierto umbral a nivel de sistema operativo de uso de CPU , Memoria , etc , se puede generar los reportes y  almacenarlos para llevar un registro historico
  3. En Oracle 11g  es un buen inicio para determinar cual es la linea base en un periodo de tiempo ( Hablare en otro articulo como hacer lineas bases y alertas

 

 Hasta la siguiente aventura en el tiempo.

 

Visitas: 235

Etiquetas: ASH, AWR, DBMS_WORKLOAD_REPOSITORY, dba_hist_wr_control, dba_history

Comentario de Anibal G. Garcia Soto el agosto 2, 2012 a las 3:13pm

Gracias a Ronald Vargas , ( Orgullosamente Oracle Ace para los centro americanos) tambien a Joel Perez (Oracle de Latinoamerica el Primero). 

Deseo hacer una aclaracion importante , el uso de los tunning packs de oracle son una parte gratuita en caso tener una licencia Oracle Enterprise , en caso de no tener licencia enterprise o licenciamiento de los Stats Packs tunning packs se incurre en una falta en el licenciamiento. ( como saber si estoy utilizando esta funcionalidad  de la BD hay que consultar dba_feature_usage_statistics).

El valor agregado de correr los reportes AWR,ASH desde un query , es que lo puedes ejecutar de manera automatica con sqlplus  y mas tarde enviarlos por correo. Usualmente los dbas corren los reporten utilizando el script que se encuentra en $ORACLE_HOME/rdbms/admin/awrrpt.sql  , $ORACLE_HOME/rdbms/admin/ashrpt.sql .

 

Comentario de Enrique Orbegozo el agosto 21, 2012 a las 3:56pm

Hola Anibal, me parece que hay un error, el uso de Tuning Pack solo es posible en Enterprise Edition previo pago de la respectiva licencia, a la cual se debe adicionar el licenciamiento del Diagnostic Pack. En el caso de SE sencillamente el uso del Tuning Pack esta prohibido.

Saludos.

Oracle Tuning Pack

Oracle Tuning Pack provides database administrators with expert performance management for the Oracle environment, including SQL tuning and storage optimizations. Oracle Diagnostics Pack is a prerequisite product to Oracle Tuning Pack. Therefore, to use Oracle Tuning Pack, you must also have Oracle Diagnostics Pack.

Oracle Tuning Pack includes the following features:

  • SQL Access Advisor

  • SQL Tuning Advisor

  • Automatic SQL Tuning

  • SQL Tuning Sets

  • SQL Monitoring

  • Reorganize objects

In order to use the features listed above, you must purchase licenses for Oracle Tuning Pack...

Comentario de Anibal G. Garcia Soto el agosto 22, 2012 a las 12:04am

Gracias por la aclaracion el articulo hace referencia al ASH y AWR rerportes que son partes del Diagnostic Pack.

Que se puede comprobar el licenciamiento en el parametro interno

control_management_pack_access

<SQL> show parameter control_management_pack_access

NAME                                 TYPE                              VALUE

control_management_pack_access       string                            DIAGNOSTIC+TUNING

 

que muestra con toda claridad si ambos estan licenciados.

 

Comentario de Enrique Orbegozo el agosto 22, 2012 a las 12:32am

Pues el parámetro control_management_pack_access tiene por defecto el valor DIAGNOSTIC+TUNING, cuando se trata de EE, y NONE cuando no es EE (http://docs.oracle.com/cd/E14072_01/server.112/e10820/initparams036...)

Pero el documento de licenciamiento (ya referenciado) dice:

In order to use the features listed above, you must purchase licenses for Oracle Diagnostics Pack. A new initialization parameter, CONTROL_MANAGEMENT_PACK_ACCESS, controls access to Oracle Diagnostics Pack and Oracle Tuning Pack.

Con lo que se entiende que, si bien Oracle ha considerado conveniente poner un valor por defecto que te permite usar los packs, es responsabilidad del DBA realizar el ajuste, de ser necesario, para que cumpla con el licenciamiento por el que ha pagado.


Saludos Anibal.

Comentario

¡Tienes que ser miembro de Comunidad Oracle Hispana para agregar comentarios!

Participar en Comunidad Oracle Hispana

Siguenos en Twitter

Escucha nuestro podcast!

Eventos

Insignia

Cargando…

© 2013   Creado por Fernando Garcia.

Insignias  |  Informar un problema  |  Términos de servicio