Esta página fue traducida automáticamente. Lee el original en inglés. English

¡FBMonLogger ahora es parte de HQbird Standard!

FBMonLogger es una herramienta para analizar la salida de las tablas de monitoreo en Firebird y encontrar problemas con consultas SQL lentas, transacciones mal diseñadas (transacciones de larga duración, transacciones con nivel de aislamiento incorrecto, etc.) e identificar aplicaciones problemáticas.

FBMonLogger puede conectarse a una base de datos Firebird con problemas de rendimiento e identificar cuál es la razón de la lentitud: ¿es alguna conexión de usuario, una consulta SQL lenta o una transacción de larga duración?

FBMonLogger es compatible con Firebird 2.1, 2.5 y 3.0 - para versiones anteriores de Firebird o InterBase, utilice FBScanner.

FBMonLogger puede mostrarle:

  • Principales conexiones con el mayor número de operaciones de E/S, lecturas sin índice y con índice
  • Principales sentencias SQL con el mayor número de operaciones de E/S, lecturas sin índice y con índice
  • Transacciones problemáticas: transacciones de larga duración, transacciones con nivel de aislamiento erróneo, transacciones de lectura/escritura e información relacionada: cuándo comenzaron, qué aplicaciones iniciaron estas transacciones, desde qué dirección IP, etc.
  • Conexiones y sentencias con las acciones de recolección de basura más intensivas
  • Proporción de lectura/escritura, proporción de INSERTS/UPDATE/DELETE, y más.

Después de conectarse a la base de datos donde desea encontrar problemas de rendimiento, se deben tomar varias instantáneas de las tablas de monitoreo - haga clic en «Get Snapshot» para tomar una instantánea.

Estadísticas de rendimiento agregadas para conexiones de usuarios

FBMonLogger

En la primera pantalla podemos ver estadísticas agregadas para las conexiones de base de datos e identificar las conexiones con los mayores problemas:

Lecturas secuenciales / Lecturas con índice

“Lecturas secuenciales / Lecturas con índice” nos muestra la proporción total entre lecturas secuenciales (sin índice) y lecturas con índice en la aplicación. Normalmente, el número de lecturas sin índice debería ser bajo, por lo que un gran porcentaje de lecturas secuenciales es señal de que muchas consultas SQL tienen planes de ejecución NATURAL, y podrían ser la razón de un tiempo de respuesta lento.

Haga clic en el registro en «TOP attachments: sequential/indexed reads» para ir a la pestaña «Attachments», donde puede ver más detalles sobre la conexión, y luego saltar a la pestaña «Transactions» o «Statements», donde verá las transacciones y sentencias vinculadas con la conexión seleccionada (si la marca «Link to selected attachment» está activada; de lo contrario, se mostrarán todas las transacciones/sentencias para todas las conexiones).

Detalles de escritura

«Write details» le ofrece una visión general de las operaciones de escritura: proporción entre INSERTs/UPDATEs/DELETEs entre todas las conexiones de la base de datos. En la tabla de los principales escritores puede ver las conexiones con el mayor número de operaciones de escritura. Es útil para identificar aplicaciones o módulos de software que realizan un número excesivo de actualizaciones o eliminaciones (que son las operaciones más peligrosas en términos de recolección de basura).

Detalles de recolección de basura

¿Qué significan las operaciones de recolección de basura?

  • Purge - el motor elimina versiones anteriores, solo queda la versión primaria en la base de datos.
  • Expunge - tanto la versión primaria como todas las versiones anteriores fueron eliminadas.
  • Backout - elimina solo la versión primaria (debido a un rollback).

Normalmente podemos asociar purge con operaciones UPDATE, Expunge con DELETE y Backout con rollback de INSERT o UPDATE. Muchos backouts podrían significar que hay un problema con la gestión de transacciones en la aplicación.

Uso de memoria

El gráfico «Memory usage» nos muestra la memoria total utilizada por todas las conexiones activas en este momento y el pico de memoria asignada para ellas en el pasado.

La lista de las principales conexiones por uso de memoria nos muestra los mayores consumidores de memoria entre sus conexiones. Es útil para encontrar aplicaciones o módulos de software con uso excesivo de memoria.

Estadísticas de rendimiento agregadas para sentencias

FBMonLogger

En la segunda pestaña puede encontrar estadísticas de rendimiento agregadas para sentencias. Estas estadísticas reflejan mejor la situación momentánea en la base de datos - dado que las tablas de monitoreo recopilan información desde el inicio de la vida de cada objeto, las sentencias que puede ver aquí son aquellas que se estaban ejecutando en el momento en que se tomó la instantánea.

Lecturas secuenciales / Lecturas con índice

En esta lista podemos ver las principales sentencias que realizan muchas lecturas secuenciales de la base de datos. Normalmente, tales sentencias requieren ajuste de SQL - ya sea mediante el ajuste de índices o mediante el rediseño de la consulta SQL.

Para ajustar la consulta, verifique su plan de ejecución: normalmente es posible mejorar la velocidad de la consulta eliminando NATURAL de los planes con nuevos índices o rediseñando la consulta. Haga clic en la sentencia en esta lista para abrir la pestaña «Statements», donde puede encontrar más detalles sobre la sentencia seleccionada y saltar a la transacción o conexión asociada.

Lecturas/escrituras de páginas

Estos gráficos y listas muestran información breve sobre las principales sentencias que realizan muchas lecturas - esto significa que consumen E/S significativa y pueden afectar el rendimiento de otras consultas. Las sentencias SQL con valores máximos deben verificarse cuidadosamente para un rendimiento óptimo.

Detalles de escritura para sentencias

En este gráfico puede ver qué sentencias SQL de escritura estaban haciendo en el momento en que se tomó la instantánea de las tablas de monitoreo e identificar UPDATEs y DELETEs que realizaron muchos cambios en la base de datos.

Detalles de recolección de basura para sentencias

En este gráfico podemos ver cuántas operaciones de recolección de basura fueron realizadas por las sentencias que se ejecutaban en el momento de la instantánea.

Uso de memoria para sentencias

A diferencia de las estadísticas agregadas de uso de memoria para conexiones, el uso de memoria de las sentencias puede mostrarnos una lista de sentencias exactas que consumen mucha memoria en el momento.

Conexiones (Attachments)

FBMonLogger

La tercera pestaña es «Attachments». Puede abrir esta pestaña directamente para saltar allí haciendo clic en uno de los registros en «Aggregated performance statistics».

Attachments muestra la lista de usuarios conectados a la base de datos Firebird, con muchos detalles útiles: USUARIO y ROL de la conexión, hora de inicio e ID de la conexión, si la recolección de basura está habilitada para la conexión, nombre del proceso remoto que estableció la conexión, y varios contadores de rendimiento acumulados para la conexión: número de lecturas secuenciales [realizadas por la conexión desde su inicio], número de lecturas con índice, número de inserciones, actualizaciones y eliminaciones, así como backouts, purges y expunges de registros.

Por defecto, algunas columnas de la conexión están desactivadas para mostrar solo la información más importante.

Por supuesto, cada vez que haga clic en una conexión, puede saltar a las transacciones que se ejecutan dentro de ella y luego a las sentencias. Hay una casilla de verificación en la esquina superior izquierda de las pestañas Transactions y Statements que controla el comportamiento: cuando está marcada, solo se mostrarán las transacciones y sentencias marcadas con el ID de la conexión seleccionada.

Transacciones

FBMonLogger

La pestaña «Transactions» muestra las transacciones activas en el momento en que se tomó la instantánea. Si la casilla «Link to selected attachment» está habilitada, solo se mostrarán las transacciones para la conexión seleccionada; de lo contrario, se muestran todas las transacciones.

Una de las características más importantes es la duración de las transacciones: dado que Firebird está diseñado para trabajar con transacciones de escritura cortas, es importante mantenerlas lo más breves posible. FBMonLogger resalta las transacciones con modos de aislamiento y configuraciones de lectura-escritura que mantienen la Transacción Activa Más Antigua y, por lo tanto, provocan que las versiones de registros excesivas no se limpien. Si ve una transacción de este tipo y comenzó hace un tiempo, significa que podría ser responsable de versiones de registros excesivas.

Ordene por la columna «started at» y busque transacciones antiguas marcadas en rojo: todas las transacciones de escritura y las instantáneas de solo lectura bloquean la Transacción Activa Más Antigua y provocan que se mantengan versiones de registros excesivas. Identifique dónde comenzaron estas transacciones (clic derecho y seleccione «View parent attachment») y corrija su código para confirmar esta transacción antes.

Sentencias

FBMonLogger

La pestaña «Statements» muestra las sentencias activas en el momento de la instantánea: si necesita capturar todas las sentencias, se deben utilizar FBPerfMon o FBScanner (todas estas herramientas son parte de IBSurgeon Optimization Pack).

Si «Link to selected attachment» está habilitado, solo se mostrarán las sentencias para la conexión específica; de lo contrario, todas las sentencias activas están en la lista.

Algunas sentencias no tienen un ID de transacción asociado (=0): estas consultas están preparadas pero no ejecutadas.