![]() |
adoquery lento en aplicación
hola compañeros!
tengo el siguiente problema que ya no se por donde cogerlo: He creado un pequeño programa que consulta una base de datos ubicada en un servidor. Tengo varias consultas que realizo mediante adoquery, pero alguna se queda "colgada" durante varios minutos. Sin embargo, la misma consulta realizada a través del "Analizador de consultas SQL" o cualquier aplicación para acceder a BBDD es instantanea! Ejemplo: obtener lineas documento P10100 y stocks SELECT L.AR_REF, L.DL_DESIGN, L.DE_NO, L.DL_QTE, S.AR_REF, S.AS_QTESTO, S.AS_EMPLACEMENT, S.AS_PRINCIPAL FROM F_DOCLIGNE L, F_ARTSTOCK S WHERE L.DO_DOMAINE = 0 AND L.DO_TYPE = 1 AND L.DO_PIECE = 'P10100' AND L.DE_NO = 1 AND L.AR_REF = S.AR_REF AND S.DE_NO = 1 (las claves de las 2 tablas aparecen en la clausula where) Consulta SQLSERVER : tiempo 0.5 segundos Consulta Adoquery: tiempo 300 segundos!! he probado poner la adoquery.cursorlocation := cluserserver pero no mejora nada el tema. Alguna sugerencia? Gracias por la ayuda |
Revisa el plan de ejecución desde SQL server, por si acaso.
Otra cosa que se me ocurre es que se te esté produciendo un DeadLock con alguna otra consulta que tengas en el programa y te quede bloqueada. Eso explicaría porqué desde SQL server es instantánea. ¿Cuandos registros devuelve? ¿Trabajas con transacciones? |
Gracias Neftali,
he puesto esta consulta la primera de la ejecución del programa para evitar "arrastrar" una ejecución anterior. Pero todo sigue igual de lento! la consulta solo devuleve 1 o 2 filas y no puedo usar transacciones por culpa del driver que controla la BBDD. |
¿Puedes diseñar la consulta utilizando JOIN's?
|
Creo que si puedo hacer JOIN.
|
Intenta hacer la Join a ver qué tiempos salen...
De todas formas aun haciendo producto cartesiano (que es lo que está pasando ahora), las tablas deberían tener muchos registros para llegar a esos tiempos. |
a mi me paso algo que fue una tonteria pero bueno, cuando hacia una consulta sobre 100 mil registros en el programa se tardaba mucho y en el Servidor nada, solucion, el programa "apuntaba" al manejador de bases de datos de mi equipo no al del servidor...
|
Time Out
Tratá de extender el timeout de la consulta, quizás no se da en el tiempo establecido y se 'muere' la consulta. Sino esa consulta volcala a un Stored Procedure y en la consulta apuntas al SP. Espero te sirva de algo...
|
| La franja horaria es GMT +2. Ahora son las 17:31:15. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi