REAL-TIME SQL MONITORING – PARTE I

Real-time SQL Monitor, es un excelente feature disponible desde Oracle 11.2 en adelante, y permite identificar problemas de performance en tiempo de ejecución, permitiendo facilmente diagnosticar sentencias con alto consumo de recursos, long queries, eventos de espera, y queries con paralelismo.

sqlmonitor2

Este feature es el reemplazo de la  antiguamente muy usada vista v$session_longops, la cual servía para monitorear querys de larga ejecución.

Requisitos para usar SQL Monitor:

  • Requiere licencia Diagnostic+Tuning pack, por lo cual el parámetro control_management_pack_access debe estar seteado a Diag+Tuning pack
  • El parámetro statistics_level debe estar seteado al menos en TYPICAL|ALL

¿Todas las sentencias ejecutadas en la Base de datos son Monitoreadas por SQL Monitor?

Como es obvio, por default, no todas las sentencias ejecutadas en la BD son monitoreadas por SQL Monitor, para que una sentencia sea monitoreada debe cumplirse alguno de los siguientes criterios:

  • Sentencias con paralelismo
  • Queries con tiempo de ejecución mayor a 5 segundos de CPU time
  • Queries con tiempo de ejecución mayor a 5 segundos de espera en I/O
  • Aquellas sentencias que explicitamente han sido seteadas con el hint /*+ MONITOR */

¿De donde podemos generar/consultar SQL Monitor report?
– Enterprise Manager
– EM Database Express
– SQL Developer
– Via command line

Vistas en las que esta basada:

En oracle 11g:  En esta version era posible consultar SQL Monitor a traves de las vistas [G]v$sql_monitor [G]v$sql_plan_monitor
En oracle 12c: A partir de esta versión tambien es posible consultar SQL monitor a través de las vistas [G]v$sql_monitor_sesstat, [G]v$sql_monitor_statname, dba_hist_reports(retención de SQL Monitor persistente en disco) y dba_hist_reports_details.

sql_monitor1

Limitaciones y parámetros ocultos (hidden parameters):

Existen limitantes a tener en cuenta si tenemos una BD con mucha carga de trabajo o complejos planes de ejecución.

  • Por default, Oracle limita el numero de sentencias SQL que seran monitoreadas a 20 x CPU_COUNT. Se puede incrementar el valor limite, seteando el parámetro oculto _sqlmon_max_plan pero se debe ser cuidadoso por que esto podría incrementar la cantidad de memoria total usada por SQL Monitor en el Shared Pool, teniendo como resultado que la información de  SQL Monitor sea obsoleta y fuera de memoria mas rápido.
  • SQL Monitor solo monitoreará aquellas sentencias SQL cuyo plan de ejecución tiene menos de 300 lineas, si queremos que SQL Monitor tome en cuenta nuestros planes de ejecución mayor a 300 lineas, podemos cambiar el parametro oculto _sqlmon_max_planlines y así incrementar este límite.Nuevamente se corre el riesgo que la información de  SQL Monitor sea obsoleta y fuera de memoria mas rápido.
  • Se puede incrementar o reducir el valor del umbral de 5 segundos, para que mas sentencias sean consideradas en el monitoreo de SQL Monitor.Esto puede ser cambiado seteando el parámetro oculto _sqlmon_threshold.

Debido a posibles efectos negativos de estos parámetros ocultos es recomendable setearlos a nivel de sesión hasta estar seguros de su impacto.

 

Responder

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 )

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

Conectando a %s