A veces pasan los minutos y una consulta no termina y eso, claro, es desesperante para todos.

Si nuestra aplicación está en una LAN puede haber decenas o inclusive centenas de computadoras conectadas a la Base de Datos. Entonces ¿cómo podemos saber cuál es la consulta problemática?

SELECT
   S.MON$TRANSACTION_ID,
   S.MON$TIMESTAMP,
   T.MON$TIMESTAMP,
   S.MON$SQL_TEXT,
   DECODE(T.MON$ISOLATION_MODE, 0, 'Consistencia', 1, 'Concurrencia', 2, 'Read Committed Record Version', 3, 'Read Committed no Record Version')
FROM
   MON$STATEMENTS   S
JOIN
   MON$TRANSACTIONS T
      ON S.MON$TRANSACTION_ID = T.MON$TRANSACTION_ID

Fíjate que hay 2 columnas MON$TIMESTAMP pero una pertenece a la tabla MON$STATEMENTS y la otra pertenece a la tabla MON$TRANSACTIONS. El objetivo de tener esas 2 columnas es saber a que hora empezó la transacción cuya consulta está causando problema. En la columna MON$SQL_TEXT se tendrá el texto de la instrucción SELECT que está tardando mucho en completarse.

Para averiguar el motivo por el cual una consulta tarda mucho, puedes leer este artículo:

https://firebird21.wordpress.com/2013/03/09/consultas-lentas-causas-y-soluciones/

¿Cómo se elimina una consulta que está tardando mucho?

Si deseas detener y eliminar la consulta que está tardando mucho, lo conseguirás con este comando:

DELETE FROM
   MON$STATEMENTS
WHERE
   MiCondición

Asegúrate nomás de que “MiCondición” se refiera a una sola fila de la tabla MON$STATEMENTS o podrías estar borrando varias filas o la conexión completa.

Artículos relacionados:

El índice del blog Firebird

El foro del blog Firebird21