Discussion:
Timeout expired
(demasiado antiguo para responder)
Ma. Rosario
2006-11-24 17:06:42 UTC
Permalink
Hola a todos, el día de hoy se me presentó un problema con una pequeña
aplicación que yo desarrollé en .NET la cual sólo extrae información de
unas vistas, el día de ayer estuvo funcionando correctamente pero el día
de hoy se presento el error justo despues de haber reiniciado la máquina
que tiene instalado el SQL Server
el error que se me muestra mi aplicación es el siguiente:

Timeout expired. The timeout period elapsed prior to completion of the
operation or the server is not responding.


Cabe señalar que tengo varias vistas y las consultas hacia estas vistas
las hago por rango de fechas y sólo se me presenta este error con una
vista en particular, lo curioso aqui, es que si la consulta la hago de
un rango de fechas de aproximadamente 1 mes si me devuelve información,
pero si incremento el rango de fechas a 2 meses aproximadamente me
arroja el error antes mencionado, ustedes me diran que quiza son
demasiados registros devueltos y la verdad no son tantos ya que en un
rango de 2 meses se me deben de devolver 1250 registros aprox, y cabe
mencionar que antes del reinicio se regresaban muchisimos mas de estos
sin ningún error, también como mencionaba las consultas a las otras
vistas no me presentan ningún error y basicamente uso la misma
estructura encuanto al diseño de las vista (son similares)los store
procedure que utilizo para obtener la información.

Espero y alguien me pueda ayudar al respecto, ya que copié un respaldo
de la bd a mi máquina y aquí si puede ejecutar todas las consultas sin
que me marque el error Timeout expired.

Muchas gracias.

Aqui un ejemplo de Store Procedure que utilizo

CREATE PROCEDURE Viajes
@fecha1 as datetime,
@fecha2 as datetime
AS
BEGIN
SELECT * FROM v_Viajes
WHERE f_prog_ini_viaje>=@fecha1 and f_prog_ini_viaje<@fecha2
END

Lo único que cambia en cada sp es el nombre de la vista y lógicamente
los valores de los parámetros.

Saludos.
PSaille
2006-11-24 17:47:02 UTC
Permalink
Comentas que reiniciaron el Server, pero.. ¿Verificaron que levantara el
servicio de SQL?.
Post by Ma. Rosario
Hola a todos, el día de hoy se me presentó un problema con una pequeña
aplicación que yo desarrollé en .NET la cual sólo extrae información de
unas vistas, el día de ayer estuvo funcionando correctamente pero el día
de hoy se presento el error justo despues de haber reiniciado la máquina
que tiene instalado el SQL Server
Timeout expired. The timeout period elapsed prior to completion of the
operation or the server is not responding.
Cabe señalar que tengo varias vistas y las consultas hacia estas vistas
las hago por rango de fechas y sólo se me presenta este error con una
vista en particular, lo curioso aqui, es que si la consulta la hago de un
rango de fechas de aproximadamente 1 mes si me devuelve información, pero
si incremento el rango de fechas a 2 meses aproximadamente me arroja el
error antes mencionado, ustedes me diran que quiza son demasiados
registros devueltos y la verdad no son tantos ya que en un rango de 2
meses se me deben de devolver 1250 registros aprox, y cabe mencionar que
antes del reinicio se regresaban muchisimos mas de estos sin ningún error,
también como mencionaba las consultas a las otras vistas no me presentan
ningún error y basicamente uso la misma estructura encuanto al diseño de
las vista (son similares)los store procedure que utilizo para obtener la
información.
Espero y alguien me pueda ayudar al respecto, ya que copié un respaldo de
la bd a mi máquina y aquí si puede ejecutar todas las consultas sin que me
marque el error Timeout expired.
Muchas gracias.
Aqui un ejemplo de Store Procedure que utilizo
CREATE PROCEDURE Viajes
@fecha1 as datetime,
@fecha2 as datetime
AS
BEGIN
SELECT * FROM v_Viajes
END
Lo único que cambia en cada sp es el nombre de la vista y lógicamente los
valores de los parámetros.
Saludos.
Ma. Rosario
2006-11-24 17:53:54 UTC
Permalink
Post by PSaille
Comentas que reiniciaron el Server, pero.. ¿Verificaron que levantara el
servicio de SQL?.
Post by Ma. Rosario
Hola a todos, el día de hoy se me presentó un problema con una pequeña
aplicación que yo desarrollé en .NET la cual sólo extrae información de
unas vistas, el día de ayer estuvo funcionando correctamente pero el día
de hoy se presento el error justo despues de haber reiniciado la máquina
que tiene instalado el SQL Server
Timeout expired. The timeout period elapsed prior to completion of the
operation or the server is not responding.
Cabe señalar que tengo varias vistas y las consultas hacia estas vistas
las hago por rango de fechas y sólo se me presenta este error con una
vista en particular, lo curioso aqui, es que si la consulta la hago de un
rango de fechas de aproximadamente 1 mes si me devuelve información, pero
si incremento el rango de fechas a 2 meses aproximadamente me arroja el
error antes mencionado, ustedes me diran que quiza son demasiados
registros devueltos y la verdad no son tantos ya que en un rango de 2
meses se me deben de devolver 1250 registros aprox, y cabe mencionar que
antes del reinicio se regresaban muchisimos mas de estos sin ningún error,
también como mencionaba las consultas a las otras vistas no me presentan
ningún error y basicamente uso la misma estructura encuanto al diseño de
las vista (son similares)los store procedure que utilizo para obtener la
información.
Espero y alguien me pueda ayudar al respecto, ya que copié un respaldo de
la bd a mi máquina y aquí si puede ejecutar todas las consultas sin que me
marque el error Timeout expired.
Muchas gracias.
Aqui un ejemplo de Store Procedure que utilizo
CREATE PROCEDURE Viajes
@fecha1 as datetime,
@fecha2 as datetime
AS
BEGIN
SELECT * FROM v_Viajes
END
Lo único que cambia en cada sp es el nombre de la vista y lógicamente los
valores de los parámetros.
Saludos.
Si verifico que estuviera levantado el servicio de SQL, de hecho, como
les comentaba en esa misma aplicación extraigo información de otras
vistas las cuales me devuelven información correctamente, aqui sólo se
me presenta este error con una vista en particular y cuando hago una
consulta de un rango de fechas mayor a 2 meses es cuando me arroja el error.
Maxi
2006-11-24 17:45:59 UTC
Permalink
Hola, te comento que no siempre hay una relacion entre la cantidad de
registros y lo lento o no de una query, lo que hace sql server es usar
indices (si los hay claro) de lo contrario estara haciendo un table_scan.
Por todo lo que has mencionado me da la sensacion que el indice si existe
pero que con un rango X de registros no lo esta usando, como comentaste que
has reiniciado el servidor puede ser un problema de estadisticas con lo cual
te recomiendo en primer medida que las actualices y luego que revises el
plan de ejecucion (si no te das cuenta lo puedes poner aqui y te ayudamos)
para ver porque se pone tan lenta esa query. En tu query veo que haces un
Select * con lo cual no es una muy buena idea que digamos asi que tambien te
recomiendo solo poner los campos que realmente vas a usar.
Con respecto al Timeout en si deberias tambien configurar en tu aplicacion
ese tiempo, por lo general esta en 20s
--
Salu2

-----------------------------------------
Microsoft MVP SQL Server
Culminis Speaker
INETA Speaker
------------------------------------------
Post by Ma. Rosario
Hola a todos, el día de hoy se me presentó un problema con una pequeña
aplicación que yo desarrollé en .NET la cual sólo extrae información de
unas vistas, el día de ayer estuvo funcionando correctamente pero el día
de hoy se presento el error justo despues de haber reiniciado la máquina
que tiene instalado el SQL Server
Timeout expired. The timeout period elapsed prior to completion of the
operation or the server is not responding.
Cabe señalar que tengo varias vistas y las consultas hacia estas vistas
las hago por rango de fechas y sólo se me presenta este error con una
vista en particular, lo curioso aqui, es que si la consulta la hago de un
rango de fechas de aproximadamente 1 mes si me devuelve información, pero
si incremento el rango de fechas a 2 meses aproximadamente me arroja el
error antes mencionado, ustedes me diran que quiza son demasiados
registros devueltos y la verdad no son tantos ya que en un rango de 2
meses se me deben de devolver 1250 registros aprox, y cabe mencionar que
antes del reinicio se regresaban muchisimos mas de estos sin ningún error,
también como mencionaba las consultas a las otras vistas no me presentan
ningún error y basicamente uso la misma estructura encuanto al diseño de
las vista (son similares)los store procedure que utilizo para obtener la
información.
Espero y alguien me pueda ayudar al respecto, ya que copié un respaldo de
la bd a mi máquina y aquí si puede ejecutar todas las consultas sin que me
marque el error Timeout expired.
Muchas gracias.
Aqui un ejemplo de Store Procedure que utilizo
CREATE PROCEDURE Viajes
@fecha1 as datetime,
@fecha2 as datetime
AS
BEGIN
SELECT * FROM v_Viajes
END
Lo único que cambia en cada sp es el nombre de la vista y lógicamente los
valores de los parámetros.
Saludos.
Ma. Rosario
2006-11-24 18:22:51 UTC
Permalink
Que tal Maxi, gracias por tratar de ayudarme, mira, deja te pongo la
consulta con la cual genero la vista

SELECT v.status_viaje, v.no_viaje, g.num_guia, v.id_unidad AS unidad,
v.id_remolque1 AS tanque1, v.id_remolque2 AS
tanque2,p.id_personal,p.nombre AS operador,
R.id_ruta,R.desc_ruta AS ruta, R.kms_ruta, tr.desc_tipo_ruta
as tipo_ruta, p1.desc_plaza AS origen, p2.desc_plaza AS destino,
rg.descripcion_producto AS producto, v.fecha_fin_viaje,
v.fecha_real_viaje, v.fecha_real_fin_viaje, v.f_prog_ini_viaje,
v.f_prog_fin_viaje, v.no_liquidacion AS liquidacion, v.kms_real as
kms_considerados_liq,
v.no_ejes_viaje AS ejes, v.rend_esperado as
rend_considerado_liq, v.lts_empresa as litros, sum
(ta.monto_anticipo+ta.monto_anticipo_iva)as anticipo
FROM dbo.trafico_viaje v INNER JOIN
dbo.trafico_ruta R ON R.id_ruta = v.id_ruta INNER JOIN
dbo.trafico_tipo_ruta tr ON R.id_tipo_ruta = tr.id_tipo_ruta
LEFT OUTER JOIN
dbo.trafico_anticipo ta ON ta.no_viaje = v.no_viaje LEFT OUTER JOIN
dbo.personal_personal p ON v.id_personal = p.id_personal LEFT
OUTER JOIN
dbo.trafico_plaza p1 ON v.id_origen = p1.id_plaza LEFT OUTER JOIN
dbo.trafico_plaza p2 ON v.id_destino = p2.id_plaza LEFT OUTER
JOIN
dbo.trafico_guia g ON v.no_viaje = g.no_viaje LEFT OUTER JOIN
dbo.trafico_renglon_guia rg ON g.no_guia = rg.no_guia AND
rg.consecutivo = 1
WHERE v.status_viaje <> 'B'
Group by v.status_viaje, v.no_viaje,g.num_guia,v.id_unidad,
v.id_remolque1, v.id_remolque2,
p.id_personal,p.nombre, r.id_ruta,r.desc_ruta,
r.kms_ruta,tr.desc_tipo_ruta,p1.desc_plaza,
p2.desc_plaza,rg.descripcion_producto, v.fecha_fin_viaje,
v.fecha_real_viaje,v.fecha_real_fin_viaje,
v.f_prog_ini_viaje, v.f_prog_fin_viaje, v.no_liquidacion,
v.kms_real, v.no_ejes_viaje, v.rend_esperado,
v.lts_empresa

Como veras es un poco extensa, y sobre los campos también te comento que
los debo de mostrar todos por eso uso el Select *, también te comento
que ya incremente el timeout en el ConnectionTimeout de la cadena de
conexión de mi aplicacióna 120 segundos y ni así.

Y respecto a lo de las estadísticas es un tema que desconosco si me
pudieras ayudar te lo agradecería muchñisimo

Saludos.
Post by Maxi
Hola, te comento que no siempre hay una relacion entre la cantidad de
registros y lo lento o no de una query, lo que hace sql server es usar
indices (si los hay claro) de lo contrario estara haciendo un table_scan.
Por todo lo que has mencionado me da la sensacion que el indice si existe
pero que con un rango X de registros no lo esta usando, como comentaste que
has reiniciado el servidor puede ser un problema de estadisticas con lo cual
te recomiendo en primer medida que las actualices y luego que revises el
plan de ejecucion (si no te das cuenta lo puedes poner aqui y te ayudamos)
para ver porque se pone tan lenta esa query. En tu query veo que haces un
Select * con lo cual no es una muy buena idea que digamos asi que tambien te
recomiendo solo poner los campos que realmente vas a usar.
Con respecto al Timeout en si deberias tambien configurar en tu aplicacion
ese tiempo, por lo general esta en 20s
Ma. Rosario
2006-11-24 19:15:07 UTC
Permalink
Que tal Maxi, ya encontré la solución a mi problema.

La cual sólo fué ejecutar el siguiente script en mi base de datos

exec sp_dboption '<dbname>', 'autoshrink', 'true'
GO

Saludos y muchas gracias por tu valiosa ayuda.
Post by Maxi
Hola, te comento que no siempre hay una relacion entre la cantidad de
registros y lo lento o no de una query, lo que hace sql server es usar
indices (si los hay claro) de lo contrario estara haciendo un table_scan.
Por todo lo que has mencionado me da la sensacion que el indice si existe
pero que con un rango X de registros no lo esta usando, como comentaste que
has reiniciado el servidor puede ser un problema de estadisticas con lo cual
te recomiendo en primer medida que las actualices y luego que revises el
plan de ejecucion (si no te das cuenta lo puedes poner aqui y te ayudamos)
para ver porque se pone tan lenta esa query. En tu query veo que haces un
Select * con lo cual no es una muy buena idea que digamos asi que tambien te
recomiendo solo poner los campos que realmente vas a usar.
Con respecto al Timeout en si deberias tambien configurar en tu aplicacion
ese tiempo, por lo general esta en 20s
Javier Loria
2006-11-25 12:47:12 UTC
Permalink
Hola Maria Rosario:
Es muy posible que pronto te vuelva a dar problemas.
Algunas otras cosas que puedes hacer:
a) Crear un Plan de Mantenimiento para defragmentar la Base de Datos
cada mes o cada 15 dias.
b) Revisarcon el Index Tunning Wizard si hay algun indice adicional
que pueda ayudarte.
Saludos,

Javier Loria
Post by Ma. Rosario
Que tal Maxi, ya encontré la solución a mi problema.
La cual sólo fué ejecutar el siguiente script en mi base de datos
exec sp_dboption '<dbname>', 'autoshrink', 'true'
GO
Saludos y muchas gracias por tu valiosa ayuda.
Post by Maxi
Hola, te comento que no siempre hay una relacion entre la cantidad de
registros y lo lento o no de una query, lo que hace sql server es usar
indices (si los hay claro) de lo contrario estara haciendo un table_scan.
Por todo lo que has mencionado me da la sensacion que el indice si existe
pero que con un rango X de registros no lo esta usando, como comentaste
que has reiniciado el servidor puede ser un problema de estadisticas con
lo cual te recomiendo en primer medida que las actualices y luego que
revises el plan de ejecucion (si no te das cuenta lo puedes poner aqui y
te ayudamos) para ver porque se pone tan lenta esa query. En tu query veo
que haces un Select * con lo cual no es una muy buena idea que digamos
asi que tambien te recomiendo solo poner los campos que realmente vas a
usar.
Con respecto al Timeout en si deberias tambien configurar en tu
aplicacion ese tiempo, por lo general esta en 20s
Loading...