FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
El siempre elusivo Query Timeout.
Estimados delphineros, buen día/tarde/noche, según aplique.
Les planteo mi problema: Tengo éste código SQL que ejecuto dentro de mi aplicación.
Para mayor abundamiento, tengo éste parámetro definido en "hard-code" dentro de mi aplicación:
Ahora, el problema es que sucede 1 de cada 3 veces un "cuelgue" del TADOQuery que contiene el SQL anterior, el cual en Microsoft SQL Server Management Studio tarda NO MÁS DE 1 MINUTO en arrojar los 80 y algo mil registros requeridos, y ésto después de ejecutar por casi 3 minutos. ¿Alguna idea, corrección, locura o maldición que me permita continuar mi desarrollo?
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#2
|
||||
|
||||
me parece que puedes optimizar un poco las consultas
no se si es mas rapido usar para la comparacion de fechas between que el > y < tambien podrias hacer un left join con la tabla T6_especiales y capturar solo aquellos que tb_especiales.E2_ctrl_pac = null lo mismo con la segunda consulta
__________________
Dulce Regalo que Satanas manda para mi..... |
#3
|
||||
|
||||
Esto es por convención dentro de la empresa. Como el código también lo hace y revisa mi patrón, detesta el uso de BETWEEN...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#4
|
||||
|
||||
Buena jornada,
Un par de ideas vagas: 1. En la respuesta de ADO components CommandTimeout recomiendan poner el valor de la propiedad CursorLocation a clUseServer. 2. Si la relación entre las dos tablas se da únicamente por el campo E2_CTRL_PAC (aunque sospecho que no), y si entiendo bien lo que propone [oscarac], sería algo así:
Pero, adicionalmente, le propongo el uso de FULL OUTER JOIN. Algo así: Si está de acuerdo, puede comparar el desempeño que le dé la ejecución de cada propuesta. -
__________________
"constructive mind, destructive thoughts" |
#5
|
||||
|
||||
Puedes aumentar el timeout (que no es qryPacientes.CommandTimeout ) desde la conexión.
También revisar el plan de ejecución y ver donde esta el problema de desempeño y ajustar los indices acordemente.
__________________
El malabarista. |
#6
|
||||
|
||||
Gracias a todos por sus ideas (muy buenas, en proceso de aplicarlas) para el mejoramiento de las sentencias SQL que tengo..., solamente que mi problema no es ello (o al menos, no creo que esté basado en ésto) sino el comportamiento errático del Query Timeout.
Como anoté primeramente, NO SE PRESENTA DE MANERA CONSTANTE, tanto así que con EL MISMO JUEGO DE DATOS, arroja el error aleatoriamente el 33.3% de las ocasiones en que es ejecutado por la aplicación que estoy desarrollando. Lo que me preocupa es que el mismo código SQL con exactamente los mismos parámetros de ejecución tiene dos o tres comportamientos diferentes, desde ejecutarse rápida y exitosamente, tardarse una "cantidad razonable de tiempo" (poco menos de un minuto) hasta arrojar una excepción, y todo con el mismo código, las mismas condiciones y sin carga en el servidor (prácticamente, yo acaparo el servidor al no estar mi patrón presente). Una vez terminado el proceso de optimización de las sentencias SQL les comentaré el resultado, pero esencialmente el problema que me ocupa es ésta elusiva excepción durante la ejecución de un TADOQuery.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#7
|
||||
|
||||
has revisado los indices de las tablas?
__________________
Dulce Regalo que Satanas manda para mi..... |
#8
|
||||
|
||||
Las condiciones de filtrado que programé se hacen sobre los índices, así que de entrada, descarto plenamente los índices..., pero de todas maneras, los revisé y están más que bien.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#9
|
||||
|
||||
Si hay un parte de esa consulta que hace una gran demanda de CPU/RAM/IO entonces puede ser que el motor se esta peleando con otros procesos del sistema por esos recursos...
__________________
El malabarista. |
#10
|
||||
|
||||
Cita:
Revisando con mis compañeros de oficina el uso del servidor, resulta que yo lo acaparo casi al 80%, así que posiblemente por ahí vayan los tiros...
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
TIBDataBase + Timeout | mjjj | Conexión con bases de datos | 3 | 17-06-2010 22:56:36 |
Timeout de TIdsmtp | mjjj | Internet | 0 | 11-01-2010 21:10:07 |
IBDataBase Timeout | pabloc | Conexión con bases de datos | 0 | 20-06-2008 08:18:37 |
TimeOut en Sql Server | FNADALO | Conexión con bases de datos | 1 | 28-09-2004 17:31:17 |
Cgi Timeout | intro | Internet | 0 | 05-09-2003 01:36:40 |
|