2011-08-11 19 views
20

¿Cómo decido qué período de tiempo usar como tiempo de espera excedido cuando uso un objeto SqlCommand?objeto SqlCommand, ¿qué período de tiempo para CommandTimeout?

En partes del código que estoy trabajando (escrito por otra persona) que tengo:

cmd.CommandTimeout = 60; 

que creo que es bastante corta. Sin embargo, he visto a algunas personas en los foros hablar sobre configurarlo en 30000, lo que parece demasiado largo.

¿Cómo puedo saber qué es lo mejor para mi aplicación?

Respuesta

37

Parece que la gente está confundida en cuanto a si esto es segundos o milisegundos. El documentation indica que el tiempo de espera está 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 consultas que espera tomar más de un minuto? Si es así, eleve el valor al valor que espera que sea más alto que cualquier cosa que vería si todo funciona correctamente, pero no tan alto como para demorarlo para alertarlo sobre un problema. (Por ejemplo, puede pasar de 1 minuto a 5 minutos.)

5

Debe calcular cuánto tiempo llevará 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.

1

Esto está en SEGUNDOS y depende por completo de cuánto tiempo el comando SQL real probablemente tome.

Por ejemplo, la mayoría de nuestros comandos ejecutan sproc que no deben tomar más de 30 segundos para completarse, sin embargo, hay un par que se ejecuta durante mucho más tiempo, lo que significa que tienen sus propios tiempos de espera altamente valorados.

Necesitará al perfil cuánto tiempo en promedio su rutina toma luego ajustar el tiempo de espera en consecuencia, y recuerda dejar espacio para las variables como la latencia, etc.

1

SqlCommand.CommandTimeout se usa para configurar el tiempo de espera antes de finalizar el intento de ejecutar un comando, lo que significa que la hora en que desea dar su SqlCommand ejecutará una consulta SQL concreta o un procedimiento almacenado y esperará a que se complete. Si el comando no se completa en el tiempo especificado, se terminará y se emitirá una excepción.

Por lo tanto, establecer el valor de CommandTimeout depende totalmente de su aplicación y requisitos, si conoce la instrucción SQL o el procedimiento almacenado, la ejecución tardará poco más que establecerlo en un valor superior a 60; de lo contrario, 60 segundos parece ser suficiente para esperar la finalización de cualquier instrucción.

+0

¿Hay alguna consecuencia en aumentar este valor a 5 minutos. Estoy desarrollando una aplicación WCF que sirve clientes de WPF. –

Cuestiones relacionadas