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:
Usando índices correctos para aumentar la velocidad de las consultas | Firebird SQL
May 09, 2013 @ 21:23:07
¿Por qué esta consulta a la Base de Datos está lenta? | Firebird SQL
May 17, 2013 @ 18:16:40
El índice del blog Firebird21 | Firebird SQL
Jun 16, 2013 @ 20:42:04