viernes, 30 de abril de 2010

Herramienta para diagnosticar problemas de performance (Oracle Performance Viewer Freeware)

(Ahora podes bajar la ultima versión del utilitario desde http://www.oramdq.com/oracle-performance-viewer/)


Hace ya varios años que trabajo con bases de datos Oracle y en todo ese tiempo fui acumulando scripts que me facilitaron diversas tareas de administración, mantenimiento, monitoreo, etc. Ya que ultimamente me vengo dedicando a temas de performance, me di cuenta que en ese tipo de actividad es importante analizar la mayor cantidad de información en el menor tiempo posible, recordemos que Oracle es una base altamente instrumentada y que versión tras versión se van agregando mas métricas (Oracle Wait Interface). A partir de 10g tenemos el repositorio AWR que almacena historial detallado de la actividad de la base.

El AWR resulta de mucha utilidad como baseline o punto de comparación cuando nos encontramos con una base que esta con problemas de rendimiento, detectados o bien por la activación de alarmas o peor aún, cuando el usuario final persive la demora y realiza el reclamo. Cualquiera que trabaje como DBA de bases productivas, ni hablar si son muy criticas, tendrá que responder rapidamente a su superior evaluando el escenario, diagnosticando y proponiendo o activando cursos de acción en forma inmediata. A veces los problemas no se detectan con facilidad y empezar a correr scripts por separado puede resultar un tanto lento.

Para facilitarme la tarea, programé un pequeño utilitario en C# donde agregué varias de las consultas que utilizo diariamente, sumado a todo el poder gráfico que me permite entre otras cosas analizar la historia, filtrar convenientemente, exportar a excel la grilla, explotar la información con doble click sobre la celda, etc. Abajo copié algunas pantallas para mostrarles como esta pensada la aplicación y obviamente me interesa compartirla en forma gratuita con quien le interesa y asi poder mejorarla.


La pantalla principal es una MDI con 4 paneles, el de arriba a la izquierda tiene una estructura de árbol con todos los reportes disponibles hasta el momento, clasificados según cierto criterio. el panel de abajo a la izquierda tiene un resumen de la base de datos donde esta conectada la app. el panel de arriba a la derecha tiene la grilla con los resultados, y el panel de abajo a la derecha tiene la consulta que se ejecutó para llenar la grilla.



La pantalla 2 muestra los criterios de filtrado para llenar la grilla de acuerdo al tipo de reporte que se este ejecutando:



La pantalla 3 muestra la grilla resultado. En el ejemplo se ejecutó el reporte de historial de DB Time:



La pantalla 4 muestra la salida del reporte de historial de los 5 eventos de espera mas importantes:



La pantalla 5 muestra las sesiones actuales de la base (información actual)



Con doble click sobre una fila de la grilla se abre otro form con detalle de la sesion seleccionada. En el panel donde aparece el texto de la sentencia que esta ejecutando la sesión se puede clickear el boton derecho y ver y seleccionar "Detalle.." para ver el historial de ejecución de dicha sentencia.



La siguiente pantalla muestra todos los forms abiertos puestos en mosaico horizontal (menu Ventanas)



La pantalla 8 es el resultado de la ejecucion del reporte de Tablespaces



Con doble click sobre la fila de la grilla se abre un nuevo form con detalle del tablespace:



La pantalla 10 muestra los posibles filtros que se pueden realizar para analizar el historial de sentencias TOP.



La pantalla 11 muesta las sentencias TOP que cumplen los filtros definidos anteriormente:



Con un click sobre la celda que tiene el SQLID se copia el valor y luego presionando el boton de REFRESCAR se "pastea" el valor copiado para ver historial de la sentencia:



Todas las grillas de resultado se pueden exportar a excel, se pueden filtrar y todas las consultas se puede copiar (botón derecho sobre el panel donde esta el texto de la consulta y seleccionar COPIAR).

Mi idea fue mostrarles algunas pantallas para que vean la funcionalidad que intenté darle a mi aplicación. Obviamente hay varios reportes mas que no estan detallados en el blog, pero invito a quien quiera evaluar mi programita (se llama OraPerfViewer.exe y pesa alrededor de 150kb) que solo me escriba a: rovedop@gmail.com y les enviaré el ejecutable que solo requiere windows y un framework .NET instalado (creo que la mayoria de las windows lo traen instalado por default). Por el momento no es RAC-Aware, pero en el futuro lo será y corre sobre versiones 10g en adelante.

Es una primera versión, y seguramente tenga varios bugs y cosas que mejorar, pero estoy seguro que compartiendo y discutiendo ideas se mejoran las cosas.

13 comentarios:

  1. Muy interesante, me alegra saber que has materializado lo que tantos hemos pensado hacer alguna vez, aunque al final siempre encontramos alguna excusa para usar el TOAD o el EM. Creo que es mucho más flexible y rápido llevar 150kb en el Pen drive cuando tienes que andar moviéndote de cliente en cliente que realizar una instalación "pesada" de las otras herramientas (si es que te dejan hacerlo).

    Un cordial saludo.

    ResponderEliminar
  2. Hola Pablo, la veo bastante completa y muy útil. Te paso algunos comentarios que espero te resulten constructivos:
    1) agregar un reporte historico de LOG SWITCHS.
    2) Información de LOG: grupos, miembros, size, status.
    3) Al reporte del estado de las sesiones le agregaria la columna MACHINE.

    Si bien no investigue mucho, voy a seguirla más de cerca en cuando pueda y pasarte mas comentarios. Sldos.

    ResponderEliminar
  3. hola pablo, ¿podrias incorporar algun articulo sobre como interpretar las awr, el dbtime, que hacer para mejorarlo y porque?

    Saludos y gracias por tus aportes.

    ResponderEliminar
  4. Pablo, me podrías pasar por mail dicha herramienta para ver en mis bases?

    ResponderEliminar
  5. Hola Pablo, me encantaría poder testear tu aplicación, pero tengo el siguiente problema (Error de OciEnvCreate run -1) cuando intento conectar a Base de Datos. ¿Sabrías de que puede ser? No se si será del registro, dll, ...

    Gracias

    ResponderEliminar
  6. Hola Pablo. Podrias pasarme tu programita para probarlo..
    Desde ya muchas gracias.
    Saludos.
    Atte.
    José Benitez.

    ResponderEliminar
  7. Hola Pablo,
    me gustaría probar tu programita y ver que tal funciona.
    Me lo podrías enviar por correo.
    Un saludo

    ResponderEliminar
  8. BUen dia Pablo: Prodras enviarme el programa a blancocarlosm@gmail.com para probarlo. Gracias.

    ResponderEliminar
  9. Hola. Me gustaría que me pudieses pasar la herramienta para probarla a mi inbox mcastroq@gmail.com

    ResponderEliminar
  10. Hola Mauricio, buenas tardes, el enlace para descargar la herramienta ya no existe, podrias informarme donde lo consigo o ya no está disponible? mi correo efrainhoyos@ingenieros.com
    Gracias

    ResponderEliminar
  11. Hola.. me interesa saber si puedes ofrecer servicios de tunnig como freelance para una DB oracle 12c. fmorenor@gmail.com

    ResponderEliminar
  12. Hola. Me gustaría que me pudieses pasar la herramienta para probarla, area342@gmail.com

    ResponderEliminar
  13. Hola, me gustaria usar tu herramienta, el enlace ya no existe, me puedes pasar un enlace para descargarla, muchas gracias....alveiro.ordonez@gmail.com

    ResponderEliminar