martes, 20 de marzo de 2012

¿Dónde está la Transacción de Firebird?

Está entrada la dedico a mi socio CSP, quién acostumbrado a gestores como Oracle o SQL Server, tuvo un problema al tratar de encontrar una transacción bloqueada en Firebird, lo cual le causó una molestia porque me indicó que los demás gestores si tenían esta funcionalidad. 

Pues, Firebird a partir de la versión 2.1, a incluido nuevas tablas referidas al "Monitoreo" del sistema, que justamente permitirán a los administradores acceder a información muy importante como son las conexiones existentes, las consultas ejecutadas, las transacciones activas, y muchas más. A continuación las tablas mencionadas:




  • MON$DATABASE: base de datos conectada. Con información como ruta de la base de datos, versión de ODS, identificadores de proceso, etc.

  • MON$ATTACHMENTS: Conexiones realizadas. Con información de estado, usuario que hace la conexión, protocolo de conexión, etc.
  • MON$STATEMENTS: Sentencias preparadas para ejecutar. Con información como identificadores, texto, estado, etc.
  • MON$CALL_TACK: Pila de llamadas de las sentencias PSQL activas.
  • MON$IO_STATS: Estadísticas de I/O.
  • MON$RECORD_STATS: Estadísticas a nivel de fila.
  • MON$MEMORY_USAGE: Uso de memoria actual.
  • MON$CONTEXT_VARIABLES: Variables de contexto conocida.

Ejemplos de consultas que se pueden realizar con estas tablas:
  • Para saber todos los identificadores de procesos con carga de CPU actuales:
SELECT MON$SERVER_PID
FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION
AND MON$STATE = 1


  • Para obtener información sobre las aplicaciones clientes
SELECT MON$USER, MON$REMOTE_ADDRESS,
MON$REMOTE_PID,
MON$TIMESTAMP
FROM MON$ATTACHMENTS
WHERE MON$ATTACHMENT_ID <> CURRENT_CONNECTION


  • Para obtener el nivel de aislamiento de la transacción actual
SELECT MON$ISOLATION_MODE
FROM MON$TRANSACTIONS
WHERE MON$TRANSACTION_ID = CURRENT_TRANSACTION


  • Para obtener las sentencias actualmente activas
SELECT ATT.MON$USER,
ATT.MON$REMOTE_ADDRESS,
STMT.MON$SQL_TEXT,
STMT.MON$TIMESTAMP
FROM MON$ATTACHMENTS ATT
JOIN MON$STATEMENTS STMT
ON ATT.MON$ATTACHMENT_ID = STMT.MON$ATTACHMENT_ID
WHERE ATT.MON$ATTACHMENT_ID <> CURRENT_CONNECTION
AND STMT.MON$STATE = 1 



Realizando las consultas indicadas podemos obtener los siguientes resultados.


Servidos.

No hay comentarios:

Publicar un comentario