2009-03-05 27 views
7

Tengo un servicio web que funciona bien sin modificaciones desde hace un par de años. De repente hoy decide que no le gustaría funcionar, y lanza un tiempo de espera de SQL:Solución de problemas de SQL Server Timeout

System.Data.SqlClient.SqlException: Tiempo de espera caducado. El período de tiempo de espera transcurrido antes de la finalización de la operación o el servidor no responde.

Es interesante observar que este servicio web vive en el mismo servidor que la base de datos, y también que si retiro la consulta de un rastreo SQL y lo ejecuto en el estudio de administración, regresa en menos de un segundo. Pero se agota el tiempo después de exactamente 30 segundos cuando se llama desde el servicio web sin falta. Estoy usando Enterprise Library para conectarme a la base de datos, así que no me puedo imaginar que haya comenzado a fallar aleatoriamente.

No estoy muy seguro de qué podría hacer que deje de funcionar repentinamente. He reciclado el grupo de aplicaciones en el que está, e incluso reinicié el proceso SQL que vi que estaba usando. Mismo comportamiento. De cualquier manera que pueda solucionar esto?

ACTUALIZACIÓN: Mitch clavado él. Tan pronto como agregué "WITH RECOMPILE" antes de la palabra clave "AS" en la definición de sproc, volvió a la vida. ¡Bravo!

+0

@Chris: Tenga en cuenta que no debe agregar WITH RECOMPILE a menos que sea una última zanja. El uso de RECOMPILE FOR es mucho más específico –

Respuesta

4

Los síntomas que describes tienen un 99.9% de certeza debido a un plan de consulta en caché incorrecto.

favor ver estas respuestas:

que incluyen el asesoramiento a reconstruir los índices y garantizar unas estadísticas son hasta la fecha como punto de partida.

¿Tiene un trabajo de mantenimiento de índice regular programado y habilitado?

La referencia canónica es: Slow in the Application, Fast in SSMS?

+0

Usted, señor, es mi héroe. – Chris

1

Reconstruir los índices pertinentes.

1

Actualice las estadísticas, marque las opciones de configuración en query in profiler. SSMS podría estar usando diferentes opciones de conjunto de conexión.

Cuestiones relacionadas