Oracle 10g: Estadísticas artesanales de nuestra base de datos en el tiempo

Oracle 10g: Estadísticas artesanales de nuestra base de datos en el tiempo il_masacratore 10 Febrero, 2010 - 12:20

Normalmente para analizar lo que pasa unas horas antes bastaría con consultar los datos históricos del Enterprise Manager pero no tenemos datos como el detalle de sesiones activas (si la cantidad total) o el estado o programa de cada una de ellas. También consultar las instantáneas en la consola web pero el problema sigue siendo el mismo, la falta de detalle. Pero no todo es insalvable y podemos en tres pasos completar esta información con algo más de detalle.

 

Paso 1: Crear una tabla con los datos que necesitaremos con un campo fecha.

Paso 2: Crear un procedimiento para alimentar la tabla con datos.

Paso 3: Crear un job con el usuario indicado para acumular datos.

 

Esta técnica puede ser “cutre” pero muchas veces sirve para analizar con más detalle y a nuestro gusto ciertas estadísticas que son visibles mediante vistas v$ que muestran el estado actual de la base de datos y que directamente no muestran un estado anterior en el tiempo.

 

Ejemplo para ver que está pasando con la apertura de conexiones y quién las hace:

Os podéis encontrar que en vuestra base de datos que tengáis problemas causados por la mala gestión de conexiones o choque entre aplicaciones que derivan en miles de conexiones abiertas. A esto se le puede sumar que esto ocurre fuera de horario y cuando sucede estamos normalmente en casa, sentados en el sofá viendo la tele.

 

Creación de la tabla:

create table AUDITORIA_SESIONES AS

(

select s.USERNAME, s.MACHINE, s.STATUS, count(*) as SESIONES, sysdate as FECHA
 from v$session s
group by s.USERNAME, s.MACHINE, s.STATUS

);

 

Creación del procedimiento:

create or replace procedure AUDITAR_SESIONES AS

begin

insert into AUDITORIA_SESIONES

(

select s.USERNAME, s.MACHINE, s.STATUS, count(*) as SESIONES, sysdate as FECHA
 from v$session s
group by s.USERNAME, s.MACHINE, s.STATUS

)

commit;

end;

 

En este caso se debe tener en cuenta que solo puede hacerse con el usuario sys y programar el job con su usuario. Ahora ya solo falta crear el job y consultar los datos cuando los necesitemos.

Ahora, ya depende de cada uno el uso que se le quiera dar. Esta manera de proceder nos puede sacar de un apurillo pero no es cuestión de llenar de basurilla la base de datos.