2009-05-08 10 views
15

Mi aplicación sigue funcionando en Timeout expired SqlExceptions. La cuestión es que esta consulta es una que simplemente tendrá que ejecutarse durante un tiempo decente. Sin embargo, tengo problemas para descubrir dónde está ocurriendo esta excepción. ¿Es este un tiempo de espera creado en el servidor de la base de datos o está sucediendo en mi programa? O si pudiera ser ambas cosas, ¿cómo averiguo cuál es?¿Qué causa el tiempo de espera expirado SqlExceptions en LINQ to SQL?

Y, por último, ¿cómo extiendo el tiempo de espera?

Respuesta

10

Es probable que esté ejecutando el CommandTimeout configurado en su DataContext. Esto predeterminado es 30 segundos.

Todo lo que necesita hacer es establecer la propiedad en el DataContext antes de ejecutar su consulta.

+3

¿Y cómo se supone que voy a hacer eso? –

3

Esto se produce de manera probal debido a que el tiempo de espera predeterminado es de 30 segundos. Puede cambiar esto estableciendo un atributo Timeout en la cadena de conexión. Alternatley puede configurar esto en el DataContext.

Aquí hay un proyecto de código article sobre esto.

15

incremento de tiempo de espera = BAD
consulta fix = BUENA

No estoy seguro de todos los detalles involucrados, pero en general se aplica lo followng:

cuando una consulta se ejecuta tareas lenta el siguiente en el estudio de gestión:

  • conjunto corrida SHOWPLAN_ALL eN
  • ejecute su consulta
  • observe la salida de la palabra "escanear". tu problema está ahí.

"Escanear" = toque cada fila (tabla o índice). ¿Le gustaría "escanear" una guía telefónica buscando un número o usar el índice?

+2

Hemos ajustado la consulta tanto como podemos. Desafortunadamente, hay mucho que puede hacer para acelerar el proceso de extraer 15k registros de una tabla de 2 millones de registros a través de un servidor vinculado. –

+0

edite su pregunta e incluya la salida de SET ShowPlan_All ON –

+1

@Jason Baker, tengo muchas consultas que se unen en varias tablas con más filas que sus 2 millones, y corren mucho más rápido que 30 segundos. Usted dice "Hemos afinado la consulta tanto como podemos", y es por eso que estaba ofreciendo mi ayuda. –