Como monitorear la utilizacion de cursores

Una tarde de domingo en la Grande Jatte - Georges Seurat

Una tarde de domingo en la Grande Jatte - Georges Seurat

Cuando no hay espacio en la SQL Area para parsear una nueva sentencia, el cursor mas viejo es cerrado y el espacio en memoria ocupado por dicho cursor es liberado. Luego, el espacio libre es asignado al nuevo cursor. Si la sentencia removida de memoria es necesitada nuevamente, Oracle debe volver a parsearla nuevamente. La shared pool debe estar dimensionada de modo tal que el numero de sentencias reparseadas sea lo menor posible. Obviamente, el modo en que el desarrollador escribe sus sentencias puede contribuir enormemente para que el numero de parseos sea minimo y el uso de la memoria compartida sea eficiente.

Es posible monitorear el sistema para ver cuan seguido Oracle no encuentra las sentencias en memoria. Este monitoreo se puede hacer con la herramienta “Oracle Enterprise Manager Database Control” o consultando directamente las vistas del diccionario de datos V$LIBRARYCACHE y V$SQLAREA.

La vista V$LIBRARYCACHE provee informacion general acerca de la library cache.

Las vistas V$SQLTEXT, V$SQLTEXT_WITH_NEWLINES, V$SQL y V$SQLAREA ofrecen informacion individual de las sentencias SQL.

V$SQL lista en filas separadas, todas las copias de las sentencias SQL identicas (child cursors). En cambio, V$SQLAREA agrupa en una sola fila todas las sentencias identicas.

Es importante destacar que la consulta de las vistas V$ es por lo general tarea del DBA. Probablemente el desarrollador no tenga en su ambiente de trabajo, acceso a estas vistas del diccionario de datos. Sin embargo es interesante que el desarrollador pueda acceder particularmente a las vistas V$ mencionadas en  un ambiente de desarrollo a fin de que pueda verificar la calidad del codigo SQL que esta desarrollando.

La vista V$LIBRARYCACHE almacena informacion de administracion del area de memoria llamado library cache. Si los valores de las columnas PINHITRATIO y GETHITRATIO se acercan a 1 entonces podemos concluir que estamos teniendo una buena performance en el uso de esta area de memoria.

El siguiente query se puede utilizar para obtener informacion acerca de la performance de la library cache.

  select gethitratio, pinhitratio
  from   v$librarycache
  where  namespace = 'SQL AREA';
   GETHITRATIO PINHITRATIO
   ----------- -----------
    .968244859  .997191864

Un valor bajo de la columna GETHITRATIO puede indicar que los objetos estas siendo “swapeados” fuera de la memoria.

Un valor bajo de PINHITRATIO puede indicar que la sesion no esta ejecutando el mismo cursor multiples veces o la sesion no esta encontrando el cursor compartido.

La vista V$SQLAREA almacena informacion acerca de todos los cursores que estan en cache.

Si la columna VERSION COUNT es mayor a 1, indica que el mismo texto es utilizado por diferentes usuarios sobre una version
propia de sus objetos (Ver ejemplo 3 del post anterior).

Si la columna LOADS es mayor a 1, indica que el cursor fue recargado en memoria despues de haber salido de la misma  por invalidacion.

La columna COMMAND_TYPE indica el tipo de sentencia: 1 – CREATE TABLE, 2 – INSERT, 3 – SELECT, 6 – UPDATE, 7 – DELETE.

En el mejor escenario, deberia haber solo una version para cada sentencia (y sin invalidaciones).

Si el numero de cargas (loads) es significativamente mas alto que la suma de versiones e invalidaciones, especialmente si el numero de loads es similar al numero de invocaciones (calls), entonces es probable que el cursor haya sido recargado por aging. En dicho caso, probablemente el sistema se beneficie si se agranda la memoria compartida (shared pool).

El siguiente es un ejemplo de una sentencia que permite ver la informacion que estamos analizando en la vista V$SQLAREA:

select sql_text, version_count, loads, invalidations, parse_calls, sorts
from   v$sqlarea
where  parsing_user_id > 0
and    command_type    = 3
Order by sql_text;

Esta sentencia esta excluyendo informacion sobre codigo SQL recursivo (parsing_user_id = 0 = SYS) y muestra solo sentencias
SELECT (command type 3).

About these ads

Deja un comentario

Aún no hay comentarios.

Comments RSS TrackBack Identifier URI

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.