c# - tiempo - sql sqlcommand timeout
Objeto SqlCommand, ¿cuánto tiempo para CommandTimeout? (5)
Debe calcular cuánto tiempo tomará la consulta más larga posible y, probablemente, multiplique ese valor por 1.5 para manejar la sobrecarga del servidor, el tráfico de red, etc.
¿Cómo decido la cantidad de tiempo que debo usar como tiempo de espera al usar un objeto SqlCommand?
En partes del código en el que estoy trabajando (escrito por otra persona) tengo:
cmd.CommandTimeout = 60;
Lo cual creo que es bastante corto. Sin embargo, he visto a algunas personas en foros hablando acerca de establecerlo en 30000, lo que parece demasiado largo.
¿Cómo sé qué es lo mejor para mi aplicación?
El valor predeterminado es 30 segundos ( documentation ).
Si su base de datos está en la misma máquina, normalmente no tiene que cambiarla. Solo inténtelo: si experimenta tiempos de espera de conexión, aumente el valor.
Esto está en SEGUNDOS y depende completamente de cuánto tiempo es probable que tome el comando SQL real.
Por ejemplo, la mayoría de nuestros comandos ejecutan sproc''s que no deben tardar más de 30 segundos en completarse, sin embargo, hay una pareja que se ejecuta por mucho más tiempo, lo que significa que tienen sus propios tiempos de espera de alto valor.
Tendrá que determinar cuánto tiempo en promedio tarda su rutina, luego ajustar el tiempo de espera en consecuencia, y recuerde dejar espacio para variables como la latencia, etc.
Parece que la gente está confundida en cuanto a si esto es segundos o milisegundos. La documentation indica que el tiempo de espera es en segundos. Un tiempo de espera de 1 minuto parece razonable para la mayoría de las consultas. Un tiempo de espera de más de 8 horas no parece razonable.
¿Tiene preguntas que espera tardar más de un minuto? Si es así, auméntelo a un valor que espere que sea más alto que cualquier cosa que vería si todo está funcionando correctamente, pero no tan alto como para que la alerta de un problema sea una eternidad. (Por ejemplo, puede ir de 1 minuto a 5 minutos).
SqlCommand.CommandTimeout
se usa para establecer el tiempo de espera antes de terminar el intento de ejecutar un comando, lo que significa que la hora que desea darle a su SqlCommand
para ejecutar una consulta de SQL particular o un procedimiento almacenado y esperar a que se complete. Si el comando no se completa en el tiempo especificado, se terminará y se lanzará una excepción.
Por lo tanto, la configuración del valor de CommandTimeout
depende totalmente de su aplicación y sus requisitos, si sabe que la instrucción en SQL o el procedimiento almacenado que está ejecutando tomará poco más de lo establecido en un valor mayor a 60, de lo contrario, 60 segundos parecen ser suficientes para esperar a que se complete de cualquier declaración.