web-dev-qa-db-fra.com

Objet SqlCommand, quelle durée pour CommandTimeout?

Comment puis-je décider de la durée à utiliser comme délai d'expiration lors de l'utilisation d'un objet SqlCommand?

Sur certaines parties du code sur lesquelles je travaille (écrit par quelqu'un d'autre), j'ai:

cmd.CommandTimeout = 60;

Je pense que c'est assez court. Cependant, j'ai vu des gens dans les forums parler de le définir à 30000, ce qui semble trop long.

Comment savoir ce qui convient le mieux à mon application?

25
bobble14988

Il semble que les gens soient confus quant à savoir s'il s'agit de secondes ou de millisecondes. documentation indique que le délai d'attente est en secondes. Un délai d'expiration d'une minute semble raisonnable pour la plupart des requêtes. Un délai d'attente de plus de 8 heures ne semble pas raisonnable.

Avez-vous des questions qui devraient prendre plus d'une minute? Si c'est le cas, augmentez-le à une valeur que vous pensez être supérieure à tout ce que vous verriez si tout fonctionne correctement, mais pas au point de prendre une éternité pour vous alerter d'un problème. (Par exemple, vous pouvez passer de 1 minute à 5 minutes.)

41
Jon Skeet

La valeur par défaut est de 30 secondes ( http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout.aspx ).

Si votre base de données se trouve sur la même machine, vous n'avez généralement pas à la modifier. Essayez-le: si vous rencontrez des délais d'attente de connexion, augmentez la valeur.

6
Peter

Vous devez calculer combien de temps prendra la requête la plus longue possible et probablement multiplier cette valeur par 1,5 pour gérer la surcharge du serveur, le trafic réseau, etc.

5

C'est dans SECONDS et cela dépend entièrement du temps que la commande SQL réelle est susceptible de prendre.

Par exemple, la plupart de nos commandes exécutent des sproc qui ne devraient pas prendre plus de 30 secondes, mais il y en a quelques-uns qui s'exécutent beaucoup plus longtemps, ce qui signifie qu'ils ont leurs propres délais d'attente de grande valeur.

Vous devrez déterminer le temps que prend en moyenne votre routine, puis ajuster le délai en conséquence, et n'oubliez pas de laisser de la place pour des variables telles que la latence, etc.

2
Lloyd

SqlCommand.CommandTimeout est utilisé pour définir le temps d'attente avant de terminer la tentative d'exécution d'une commande, ce qui signifie que le temps que vous voulez donner à votre SqlCommand pour exécuter une requête sql particulière ou une procédure stockée et attendre qu'il se termine. Si la commande ne se termine pas dans le délai spécifié, elle sera terminée et une exception sera levée.

Ainsi, la définition de la valeur de CommandTimeout dépend totalement de votre application et de vos besoins, si vous savez que l'instruction sql ou la procédure stockée que vous exécutez prendra peu de place à une valeur supérieure à 60, sinon 60 secondes semblent être assez pour attendre la fin de toute déclaration.

1
Waqas