Análisis de tendencias con AWR Warehouse y Metabase
Espero sea uno de los muchos artículos que quiero publicar al respecto.
Llevo tiempo dándole vueltas a la creación de cuadros de mando específicos para dar una visión rápida de tendencias en BBDD (CPU, DBTIME, AAS) que sean de valor para entender el comportamiento de la base de datos y desvíos en este, así como un seguimiento del capacity planning en el tiempo.
Para ello parto de varias premisas:
Datos históricos. En mi caso quiero 5 años.
Minado sin generar carga en producción
Consolidación de las métricas de rendimiendo de las bases de datos de la compañía en un único repositorio
Que sea fácilmente entendible y ya puestos, bonito.
Código abierto.
Para ello, disponiendo de licencia enterprise (se puede extrapolar a statspack!) y despliegue de OEM (Oracle Enterprise Manager) me he decantado por:
AWR Warehouse
Metabase para explotar los datos
¿Que es metabase?
Metabase es una potente herramienta de Business Intelligence (BI) de código abierto que facilita la adquisición y presentación de datos desde diversas fuentes. No solo ofrece una interfaz amigable y accesible, sino también una amplia gama de herramientas que permite llevar a cabo una variedad de análisis detallados y obtener insights valiosos
Código abierto, perfecto. Podemos almacenar consultas de Oracle y mostrarlas con diversos gráficos que se adaptan a los escenarios que planteo.
Como primer contacto con la herramienta definiendo una gráfica con el DB Time de base de datos en el rango especificado. Todo en cuestión de minutos.
Cual es la idea? Tener tanto una visión del comportamiento de la base de datos, en este caso un RAC de 2 nodos, como poder comparar en el tiempo rangos concretos y poder tener una visión real de desvíos en éste.
Pongo un ejemplo comparando DB Time en dos periodos:
Se pueden ir unificando en un mismo cuadro de mando todas las métricas que nos interesen para tener una visión comparativas de éstas:
Las consultas utilizadas contra la base de datos de AWR Warehouse en este caso serían las siguientes:
-- Db Time
SELECT *
FROM
(
SELECT
D.INSTANCE_NAME,
TO_CHAR(B.BEGIN_INTERVAL_TIME, 'DD-MON-YY HH24:MI') SNAP_BEGIN_TIME,
ROUND((A.VALUE - LAG(A.VALUE) OVER (ORDER BY A.DBID, A.INSTANCE_NUMBER, A.SNAP_ID)) / 1000000 / 60, 2) DB_TIME_MIN
FROM
DBA_HIST_SYS_TIME_MODEL A
JOIN DBA_HIST_SNAPSHOT B ON A.DBID = B.DBID AND A.SNAP_ID = B.SNAP_ID AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER
JOIN DBA_HIST_DATABASE_INSTANCE D ON A.DBID = D.DBID AND A.INSTANCE_NUMBER = D.INSTANCE_NUMBER
JOIN dbsnmp.caw_dbid_mapping M ON D.DBID = M.new_dbid AND m.target_name = {{target_name}}
WHERE
A.STAT_NAME = 'DB time'
and b.begin_interval_time between {{fecha_inicial}} and ({{fecha_final}} + 1)
)
WHERE
DB_TIME_MIN IS NOT NULL
AND DB_TIME_MIN > 0
ORDER BY
SNAP_BEGIN_TIME
-- CPU Time
SELECT *
FROM
(
SELECT
D.INSTANCE_NAME,
TO_CHAR(B.BEGIN_INTERVAL_TIME, 'DD-MON-YY HH24:MI') SNAP_BEGIN_TIME,
ROUND((A.VALUE - LAG(A.VALUE) OVER (ORDER BY A.DBID, A.INSTANCE_NUMBER, A.SNAP_ID)) / 1000000 / 60, 2) DB_CPU_MIN
FROM
DBA_HIST_SYS_TIME_MODEL A
JOIN DBA_HIST_SNAPSHOT B ON A.DBID = B.DBID AND A.SNAP_ID = B.SNAP_ID AND A.INSTANCE_NUMBER = B.INSTANCE_NUMBER
JOIN DBA_HIST_DATABASE_INSTANCE D ON A.DBID = D.DBID AND A.INSTANCE_NUMBER = D.INSTANCE_NUMBER
JOIN dbsnmp.caw_dbid_mapping M ON D.DBID = M.new_dbid AND m.target_name = {{target_name}}
WHERE
A.STAT_NAME = 'DB CPU'
and b.begin_interval_time between {{fecha_inicial}} and ({{fecha_final}} + 1)
)
WHERE
DB_CPU_MIN IS NOT NULL
AND DB_CPU_MIN > 0
ORDER BY
SNAP_BEGIN_TIME
Entrando en juego AWR Warehouse deberemos tener siempre en cuenta el cruce con:
dbsnmp.caw_dbid_mapping
Abre un amplio abanico de posibilidades, dándome ya una visión de periodo a revisar.
Espero que pueda aportar ideas de valor y abrimos el melón de extrapolar analítica a AWR?
Sigo jugando con la herramienta...
Subscribe to my newsletter
Read articles from Carla Muñoz López directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Carla Muñoz López
Carla Muñoz López
Mi nombre es Carla y me defino como una apasionada de conocer, compartir ideas, divertirme y aprender todo lo relacionado con Oracle. Alegre y creativa, con un alto grado de autoexigencia, que busca, incluso sin querer, una forma diferente de ver un mismo problema o solución. Defensora del trabajo en equipo en todas las facetas de la vida y de disfrutar todo lo que haces, siempre con humildad. Actualmente cuento con más de 15 años de experiencia como administradora de Oracle, habiendo ocupado previamente posiciones como desarrolladora en la rama de Inteligencia de Negocios. Fue en ese momento que me di cuenta de que no quería centrarme en el desarrollo, sino participar en todas las capas que involucraban los datos, desde el despliegue de la base de datos hasta su explotación final. Siempre estoy dispuesta a ayudar y compartir conocimientos. Creo firmemente que con la tecnología hay que divertirse y no verla como una competencia. La persona con la que tienes que ser el mejor es contigo mismo.