¿Qué están haciendo los usuarios en este momento?

A veces puede interesarnos conocer las sentencias que están ejecutando los usuarios en este momento o las sentencias que ejecutaron con anterioridad.

Esa información la podemos recuperar de la tabla MON$STATEMENTS, como se muestra a continuación:

SELECT
   *
FROM
   MON$STATEMENTS

Ese SELECT nos mostrará algo similar a esto:

STATEMENT1

Captura 1. Si haces clic en la imagen la verás más grande

La columna MON$STATE puede tener 3 valores posibles:

0 significa que no se está usando en este momento

1 significa que está activo en este momento

2 significa que está detenido, va a continuar enviando datos al Cliente pero ahora no lo está haciendo

La columna MON$TIMESTAMP muestra el momento en que empezó la ejecución del comando

La columna MON$SQL_TEXT muestra el comando que ejecutó el usuario

Comandos actualmente en ejecución

Para conocer los comandos que actualmente están siendo ejecutados debes poner la condición de que MON$STATE sea 1.

SELECT
   *
FROM
   MON$STATEMENTS
WHERE
   MON$STATE = 1

Y para conocer los comandos que actualmente están siendo ejecutados pero sin incluir la conexión actual (es decir, que tus propios comandos no se muestren)  podrías escribir algo como:

SELECT
   A.MON$USER,
   A.MON$REMOTE_ADDRESS,
   S.MON$SQL_TEXT,
   S.MON$TIMESTAMP
FROM
   MON$ATTACHMENTS A
JOIN
   MON$STATEMENTS S
      ON A.MON$ATTACHMENT_ID = S.MON$ATTACHMENT_ID
WHERE
   A.MON$ATTACHMENT_ID <> CURRENT_CONNECTION AND
   S.MON$STATE = 1

Conclusión:

 Firebird nos permite conocer los comandos que están siendo ejecutados en este preciso momento. Eso puede resultarnos muy útil si descubrimos que algo está mal pero no sabemos exactamente qué es lo que está mal. Observando lo que hacen los usuarios puede darnos unas pistas muy valiosas para encontrar el problema.

Artículo relacionado:

El índice del blog Firebird21