Tiempo de espera de conexión para el servidor SQL


109

¿Puedo aumentar el tiempo de espera modificando la cadena de conexión en el web.config?


7
No lea esto como lo hice pensando que el tiempo de espera controlaría la ejecución de la consulta; no es así, solo el tiempo de espera para conectarse al servidor; "tiempo de espera de conexión" sería un nombre mejor. Ver stackoverflow.com/a/7976867/409856
downwitch

Respuestas:


213

Sí, puede agregar ;Connection Timeout=30a su cadena de conexión y especificar el valor que desee.

El valor de tiempo de espera establecido en la Connection Timeoutpropiedad es un tiempo expresado en segundos . Si esta propiedad no se establece, el valor de tiempo de espera para la conexión es el valor predeterminado (15 segundos).

Además, establecer el valor de tiempo de espera en 0 , está especificando que su intento de conexión espera un tiempo infinito. Como se describe en la documentación, esto es algo que no debe establecer en su cadena de conexión:

Un valor de 0 indica que no hay límite y debe evitarse en ConnectionString porque un intento de conexión espera indefinidamente.


4
¿Es este tiempo de espera en minutos o segundos?
user1

1
@ user1 "La cantidad de tiempo (en segundos) para esperar una conexión con el servidor antes de terminar el intento y generar un error".
Santux

5
FYI: Connection Timeout = 0 es infinito.
Abdul Saboor

¿Puede dar un ejemplo de esto? Estoy usando EF6 y tengo 3 millones de datos en mi tabla cuando hago algún proceso, el programa devuelve un error de tiempo de espera ... nota: estoy usando la indexación en la tabla
saulyasar

4
@saulyasar Este es el tiempo de espera de CONEXIÓN, no el tiempo de espera de COMANDO. El tiempo de espera de CONEXIÓN se refiere a cuánto tiempo intentará CONECTARSE al servidor SQL. Desea investigar el tiempo de espera de COMMAND, que es cuánto tiempo se ejecutará un procedimiento o instrucción antes de que se agote el tiempo de espera.
granadaCoder

32

Mmmm ...

Como dijo Darin, puede especificar un valor de tiempo de espera de conexión más alto, pero dudo que ese sea realmente el problema.

Cuando obtiene tiempos de espera de conexión, generalmente es un problema con uno de los siguientes:

  1. Configuración de red: conexión lenta entre su servidor web / dev box y el servidor SQL. Aumentar el tiempo de espera puede corregir esto, pero sería aconsejable investigar el problema subyacente.

  2. Cadena de conexión. He visto problemas en los que un nombre de usuario / contraseña incorrectos, por alguna razón, darán un error de tiempo de espera en lugar de un error real que indique "acceso denegado". Esto no debería suceder, pero así es la vida.

  3. Cadena de conexión 2: si especifica el nombre del servidor de forma incorrecta o incompleta (por ejemplo, en mysqlserverlugar de mysqlserver.webdomain.com), obtendrá un tiempo de espera. ¿Puede hacer ping al servidor usando el nombre del servidor exactamente como se especifica en la cadena de conexión desde la línea de comando?

  4. Cadena de conexión 3: si el nombre del servidor está en su DNS (o archivo de hosts), pero apunta a una IP incorrecta o inaccesible, obtendrá un tiempo de espera en lugar de un error de máquina no encontrada.

  5. La consulta que está llamando se está agotando. Puede parecer que la conexión con el servidor es el problema, pero, dependiendo de cómo esté estructurada su aplicación, podría llegar hasta la etapa en la que se ejecuta su consulta antes de que se agote el tiempo de espera.

  6. Fugas de conexión. ¿Cuántos procesos se están ejecutando? ¿Cuántas conexiones abiertas? No estoy seguro si ADO.NET sin procesar realiza la agrupación de conexiones, cierra automáticamente las conexiones cuando es necesario en la biblioteca empresarial, o donde todo eso está configurado. Probablemente sea una pista falsa. Sin embargo, al trabajar con WCF y servicios web, he tenido problemas con las conexiones no cerradas que provocan tiempos de espera y otros comportamientos impredecibles.

Cosas para probar:

  1. ¿Obtiene un tiempo de espera cuando se conecta al servidor con SQL Management Studio? Si es así, es probable que la configuración de la red sea el problema. Si no ve ningún problema al conectarse con Management Studio, el problema estará en su aplicación, no en el servidor.

  2. Ejecute SQL Profiler y vea lo que realmente pasa por el cable. Debería poder saber si realmente se está conectando o si el problema es una consulta.

  3. Ejecute su consulta en Management Studio y vea cuánto tarda.

¡Buena suerte!


Si su consulta se agota, supongo que obtendrá un commandtimeout
user55474

@ user55474 probablemente; depende ( muy raramente) de cómo se llame.
Salvar el

No de acuerdo con esta publicación de blog de msdn: blogs.msdn.com/b/spike/archive/2008/07/31/…
tom redfern

@hugh, creo que dije que era raro, pero lo he visto de primera mano.
Salvar el

1
+1 para "Ejecutar SQL Profiler". Parece que será complicado, pero simplemente haga clic en "Herramientas> Analizador de SQL Server" y observe lo que su aplicación le dice a SQL Server. Resulta que la mía fue la Opción # 5 :)
Andrew Kvochick

11

Si desea cambiarlo dinámicamente, prefiero usar SqlConnectionStringBuilder .

Le permite convertir ConnectionString, es decir, una cadena en un objeto de clase. Todas las propiedades de la cadena de conexión se convertirán en su miembro.

En este caso, la ventaja real sería que no tiene que preocuparse por si la parte de la cadena ConnectionTimeout ya existe en la cadena de conexión o no.

Además, como crea un objeto y siempre es bueno asignar valor en el objeto en lugar de manipular la cadena.

Aquí está el ejemplo de código:

var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);

sscsb.ConnectTimeout = 30;

var conn = new SqlConnection(sscsb.ConnectionString);

2
No puedo creer que se haya pensado que hacer que la ConnectionTimeoutpropiedad en el SqlConnectiontipo sea de solo lectura sea una buena idea.
Maslow
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.