Convertir informes Statspack de Oracle a HTML navegable con Python

Hola a todos, en muchas revisiones de rendimiento de Oracle seguimos utilizando Statspack, sobre todo en entornos antiguos, bases de datos sin licencia de Diagnostics Pack o instalaciones en las que se prefiere trabajar con herramientas estándar de la propia base de datos.

El problema no es Statspack en sí. El problema es el formato de salida: informes de texto muy largos, con saltos de página, secciones repetidas, cabeceras que se pierden al hacer scroll y bloques de SQL difíciles de leer.

Para facilitar estas revisiones hemos preparado un pequeño script en Python que permite convertir informes Statspack de Oracle a HTML navegable, manteniendo el contenido original del informe pero haciéndolo mucho más cómodo de consultar, compartir y archivar.

Conversión y análisis de informes Statspack de Oracle mediante Python y HTML navegable
Vista general del informe HTML

Objetivo del script

El objetivo no es sustituir el análisis DBA, sino mejorar la forma en la que consumimos el informe.

Partimos de un fichero de texto generado por Statspack y obtenemos una salida HTML con:

  • Cabecera resumen del informe.
  • KPIs principales: DB Time, DB CPU, Avg Active Sessions, lecturas lógicas, lecturas físicas, parses, ejecuciones y transacciones.
  • Índice lateral navegable.
  • Sección Overview agrupada.
  • Secciones originales del Statspack conservadas en formato monoespaciado.
  • Mejor presentación de las secciones SQL ordered by.
  • Exportación auxiliar a JSON y CSV para análisis posteriores.

La idea es que el informe siga siendo reconocible para un DBA Oracle, pero que sea mucho más sencillo moverse por él.

Entrada: informe Statspack original

El punto de partida es el informe clásico generado por Statspack. Un ejemplo de cabecera del fichero original sería:

STATSPACK report for

Database    DB Id    Instance     Inst Num  Startup Time   Release     RAC
~~~~~~~~ ----------- ------------ -------- --------------- ----------- ---
          1436259124 ORCL1               1 13-Jan-26 10:08 11.2.0.4.0  NO

Snapshot       Snap Id     Snap Time      Sessions Curs/Sess Comment
~~~~~~~~    ---------- ------------------ -------- --------- ------------------
Begin Snap:         11 11-May-26 13:11:31       22       1.5
  End Snap:         12 11-May-26 13:16:03       22       1.5
   Elapsed:       4.53 (mins) Av Act Sess:       0.0
   DB time:       0.05 (mins)      DB CPU:       0.01 (mins)

En el HTML esta información se agrupa en una sección Overview y además se muestra resumida en tarjetas superiores.

Cómo ejecutar el script

El script se lanza indicando el fichero de entrada con `–lst-input`. Por ejemplo:

C:\Informes\Python\python.exe C:\Informes\scripts\statspack_report.py ^
  --lst-input C:	emp2\statspack\entrada\sp_ORCL1.txt ^
  --html-output C:	emp2\statspack\entrada\sp_ORCL1.html

Si queremos generar también los ficheros auxiliares:

C:\Informes\Python\python.exe C:\Informes\scripts\statspack_report.py ^
  --lst-input C:	emp2\statspack\entrada\sp_ORCL1.txt ^
  --html-output C:	emp2\statspack\entrada\sp_ORCL1.html ^
  --json-output C:	emp2\statspack\entrada\sp_ORCL1.json ^
  --sql-csv-output C:	emp2\statspack\entrada\sp_ORCL1_top_sql.csv ^
  --waits-csv-output C:	emp2\statspack\entrada\sp_ORCL1_waits.csv
Conversión y análisis de informes Statspack de Oracle mediante Python y HTML navegable
Ejecución del script

Salida HTML navegable

La salida principal es un fichero HTML que puede abrirse directamente con cualquier navegador. No necesita conectarse a Oracle ni requiere instalar nada en el servidor de base de datos.

La estructura se divide en dos partes:

  • A la izquierda, un índice con las secciones detectadas.
  • A la derecha, el contenido completo del informe.

Esto permite saltar rápidamente a secciones como:

  • Top 5 Timed Events.
  • Foreground Wait Events.
  • Background Wait Events.
  • SQL ordered by CPU.
  • SQL ordered by Elapsed time.
  • SQL ordered by Gets.
  • Tablespace IO Stats.
  • File IO Stats.
  • Buffer Pool Advisory.

La sección inicial Overview evita que la cabecera del informe quede repartida en múltiples bloques sueltos.

Top 5 Timed Events

Una de las primeras secciones que solemos revisar es Top 5 Timed Events. En el informe HTML se conserva el formato de ancho fijo para evitar desalinear las columnas originales del Statspack.

Conversión y análisis de informes Statspack de Oracle mediante Python y HTML navegable
Top 5 Timed Events

Esto es importante porque muchas secciones de Statspack están construidas por posición de caracteres, no por separadores claros. Si se intenta convertir todo automáticamente a tablas HTML, algunas partes pueden perder alineación o quedar menos legibles que el texto original.

Por ese motivo, el script utiliza una estrategia conservadora: mejora la navegación y la presentación, pero mantiene el formato original donde es más seguro.

Mejoras en las secciones SQL ordered by

Las secciones SQL ordered by son de las más útiles en una revisión de rendimiento, pero también de las más incómodas de leer en texto plano.

El script realiza varias mejoras:

  • Repite la cabecera de métricas en cada SQL.
  • Separa cada sentencia SQL en su propio bloque visual.
  • Mantiene las estadísticas junto al texto SQL.
  • Limpia algunos saltos artificiales de línea producidos por Statspack.
  • Facilita copiar la SQL para revisarla posteriormente.
SQL ordered by CPU

Por ejemplo, en lugar de tener una cabecera al principio de la sección y muchas sentencias debajo, cada bloque queda identificado con sus métricas:

CPU Time (s)
Executions
CPU per Exec (s)
%Total
Elapsed Time (s)
Buffer Gets
Old Hash Value

Esto hace mucho más cómodo revisar el informe haciendo scroll.

Ficheros auxiliares JSON y CSV

Además del HTML, el proceso puede generar salidas auxiliares pensadas para análisis posteriores:

  • JSON con metadatos, KPIs y estructura del informe.
  • CSV con SQL destacadas.
  • CSV con eventos de espera.

Estos ficheros permiten automatizar comparativas, cargar los datos en una base de datos, hacer históricos o generar resúmenes adicionales.

Por ejemplo, en un proceso mensual de revisión de rendimiento, podríamos guardar todos los JSON generados y comparar la evolución de:

  • DB Time.
  • DB CPU.
  • Avg Active Sessions.
  • Eventos de espera principales.
  • SQL con mayor consumo.
  • Lecturas lógicas y físicas.

Ventajas prácticas

Las principales ventajas de este enfoque son:

  1. No modifica el proceso estándar de generación de Statspack.
  2. No necesita conexión a Oracle para visualizar el resultado.
  3. Permite compartir el informe como un único HTML.
  4. Conserva el contenido original del informe.
  5. Facilita la navegación por informes largos.
  6. Deja preparados datos estructurados para análisis posteriores.

Esto resulta especialmente útil cuando se revisan varios informes de distintos intervalos horarios o cuando necesitamos enviar una primera evidencia visual al cliente.

Posibles automatizaciones

Una vez generado el conversor, es sencillo ampliar el proceso:

  • Procesar todos los Statspack de una carpeta.
  • Crear un índice HTML con todos los informes generados.
  • Generar un ZIP por informe.
  • Cargar los JSON en SQLite o PostgreSQL.
  • Integrarlo con Microsoft Access mediante VBA.
  • Lanzarlo desde tareas programadas en Windows o cron en Linux.

Por ejemplo, desde Microsoft Access se podría llamar al ejecutable de Python y generar automáticamente el HTML asociado a un informe cargado por el usuario.

Conclusión

Statspack sigue siendo una herramienta muy útil para revisar rendimiento en Oracle, especialmente en entornos donde no se dispone de AWR o donde se quiere trabajar con una herramienta estándar y ligera.

Con este script en Python conseguimos una capa de presentación mucho más cómoda: el informe sigue siendo el mismo, pero se puede navegar mejor, compartir mejor y reutilizar sus datos para análisis posteriores.

El siguiente paso natural sería construir un pequeño repositorio histórico de informes, de forma que podamos comparar periodos, detectar regresiones y localizar rápidamente cambios en la carga o en las SQL más costosas.

Esperamos que este script os resulte útil para convertir informes Statspack de Oracle a HTML de una forma más cómoda y visual. Podéis descargaros el script desde aquí.

Si necesitáis ayuda en revisiones de rendimiento, análisis de SQL o interpretación de informes Statspack/AWR, podéis consultar también nuestro servicio express de tuning de bases de datos.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *