
Como detener una consulta en proceso
#1
Escrito 31 enero 2010 - 08:29
Quiero saber si hay alguna forma de abortar una consulta sql en proceso y que esta tardando demasiado.
Uso Zeos y Firebird 2.1
gracias de antemano
#2
Escrito 31 enero 2010 - 08:54
Saludos.
#4
Escrito 31 enero 2010 - 09:14
pensaba que habria algun evento en el query que me permitiera detener la consulta o algo asi.
#5
Escrito 31 enero 2010 - 09:17
gracias enecumene dejame revisar como hacer funcionar esto en mi programa y cualquier cosa informare el avance.
pensaba que habria algun evento en el query que me permitiera detener la consulta o algo asi.
Pues por el momento desconozco otra opción para lo que necesitas.

#6
Escrito 01 febrero 2010 - 01:55
Cancel executing query
Information about executing queries is available from the table MON$STATEMENTS. If you want cancel any query you must delete record from the MON$STATEMENTS, for example:
delete from mon$statements where mon$sql_text = :sql_text
Sometimes query text doesn’t available, however you can detect required query by alternate parameters like MON$STATE (query activity [1 - active, 0 - idle]) or MON$TIMESTAMP (query start time).
NOTA: No lo he probado nunca, ya que aún utilizo FB 2.0
Saludos.
#7
Escrito 01 febrero 2010 - 06:27
#8
Escrito 01 febrero 2010 - 08:33
Me podrias dar una idea mas detallada de como usar estas tablas de monitoreo de firebird 2.1
Se que has dicho que no las has utilizado, pero con tu experiencia, me gustaria oir una sugerencia de como utilizarlas.
Todo esto no es excluyente de los demas miembros del foro, sus ideas son bienvenidas. Solo le explico en principio a Marc, porque el fue quien me dio esa idea.
talvez al final tenga que usar la idea de enecumene sobre los hilos y talvez unirla a la idea de marc.
#9
Escrito 01 febrero 2010 - 09:49
luk2009, las aplicaciones de por si es un hilo "permanente" hasta que la misma finaliza.
Por ende, cuando realizas cualquier proceso y toma tiempo la aplicación tiende a colgarse o a tardar en responder; te exhorto a que hagas uso de lo mencionado por Enecumene más ligado a lo mencionado por Marc.
Así que al momento de lanzar tu consulta creas un hilo y tu aplicación podrá responder a otro proceso simultaneo, aquí es donde entra la explicación de Marc, pones un botón con la sentencia de cancelar la consulta.
Has este ejercicio y nos cuenta.
#10
Escrito 02 febrero 2010 - 03:59
Esto se puede solucionar ejecutando las consultas en threads separados, como te han comentado, o bastante más sencillo (aunque no tan cómodo para el usuario) : poniendo el monitoreo y cancelación de consultas en una segunda aplicación independiente.
Como es una aplicación independiente no tendrás el problema de que esté bloqueada hasta que finalice la ejecución de la consulta problemática.
Yo lo que haría es que esa aplicación mostrase las consultas que tiene el usuario en activo (mediante un select sobre MON$STATEMENTS), y desde ahí permitiese borrar un registro para cancelar la consulta.
Saludos.
#11
Escrito 02 febrero 2010 - 09:17
#12
Escrito 02 febrero 2010 - 09:46