2010-11-15 2 views
0

D'accord, nous avons deux serveurs de base de données, l'un est détenu par nous, un appartenant à un partenaire. Nos partenaires ont eu des problèmes ces derniers temps qui nous ont causé de nombreuses erreurs de timeout sql, ce qui enlève tout notre système. Nous préférerions limiter le temps que ces requêtes peuvent prendre à dire 20 secondes max, sinon cesser d'essayer et lancer l'erreur (que nous pouvons attraper avec un bloc try/catch).Quarantaine requêtes SQL Server dans .net 3.5

quelques questions:

  1. Est-il possible de définir une chaîne particulière db/connexion au délai d'attente après X secondes?
  2. Est-ce la meilleure façon de mettre en quarantaine cet autre système? ou y at-il de meilleurs moyens de s'y prendre?

Merci

+0

essayez-vous de définir le délai de connexion sur ASP.NET ou SQLServer? Vous ne pouvez pas le définir dans la chaîne de connexion, mais vous pouvez le faire sur l'objet sqlconnection. Pouvez-vous poster du code? – jcolebrand

+0

Je ne peux pas poster de code. Honnêtement, j'ai juste pensé à définir le délai d'attente en écrivant cette question, donc je ne l'ai pas examiné. Je vais regarder dans et mettre à jour – Prescott

+0

Ouais, d'accord, c'était une question assez bête. commandTimeout dans la chaîne de connexion fonctionnera très bien. – Prescott

Répondre

1

question Dumb - CommandTimeOut dans la chaîne de connexion suffit pour mes besoins.

0

Ces problèmes sont mieux traités par SQL Server Resource Governor. Le gouverneur de ressources limitera la quantité de mémoire et de ressources processeur qu'un workload peut consommer. Vous pouvez diviser le serveur en deux charges de travail et allouer 50% à chacune d'entre elles, afin que vous et votre partenaire puissiez consommer chacun 50% des ressources du serveur. C'est beaucoup mieux que de définir un CommandTimeout (qui doit être défini individuellement pour chaque SqlCommand, le paramétrer sur une chaîne de connexion n'a aucun effet) car le délai d'expiration de la commande affectera non seulement les deux parties (ie celui qui abuse des ressources et la victime) mais est également trop tard: le commandTimeout réagira seulement après le serveur est lent. En outre, une partie peut mettre en boîte jusqu'à des ressources d'abus avec de petites commandes fréquentes.

+0

mais si vous savez qu'une requête particulière est longue, ne serait-il pas logique de demander la clémence sur _that_ query? Ensuite, vous n'avez pas besoin de changer la gouvernance par défaut – jcolebrand

+0

En lisant l'OP, il ne veut pas de clémence, mais une intervention à la place: une commande inférieure agressive timetime pour expirer plus tôt lorsque le serveur ne répond pas. –

+0

La définition de CommandTimeout dans la chaîne de connexion n'aura aucun effet? Pourquoi alors est-ce même une option? J'aimerais utiliser Resource Governor - mais nous sommes sur sql 2005. J'ai mis beaucoup d'efforts à essayer de me mettre à niveau, mais au final, il nous est plus facile de passer à nos propres systèmes. – Prescott