2009-05-08 8 views
15

Mon application continue à fonctionner dans SqlExceptions Expiration expiré. Le fait est que cette requête est celle qui devra simplement fonctionner pendant une période de temps décente. J'ai de la difficulté à trouver où cette exception se produit bien. Est-ce un délai d'attente créé sur le serveur de base de données ou est-ce que cela se passe dans mon programme? Ou si cela pouvait être les deux, comment puis-je savoir lequel?Quelles sont les causes SqlExceptions expiré Timeout expiré dans LINQ to SQL?

Et enfin, comment puis-je prolonger la période d'expiration?

Répondre

10

Il est probable que vous exécutiez le CommandTimeout défini sur votre DataContext. Cela vaut par défaut 30 secondes.

Tout ce que vous devez faire est de définir la propriété sur DataContext avant d'exécuter votre requête.

+3

Et comment suis-je supposé cela? –

3

Cela se produit probablement parce que le délai par défaut est de 30 secondes. Vous pouvez modifier cela en définissant un attribut Timeout sur la chaîne de connexion. Alternatley vous pouvez définir cela sur le DataContext.

Voici un projet de code article à ce sujet.

15

délai d'augmentation = BAD
fix query = BON

Je ne suis pas sûr de tous les détails impliqués, mais en général le followng DÉPOSÉ:

lorsqu'une requête est exécutée do lent ce qui suit en studio de gestion:

  • exécuter SET SHOWPLAN_ALL ON
  • parcourez votre requête
  • Regardez la sortie pour le mot "scan". votre problème est là. "Scan" = touchez chaque ligne (table ou index)

Voulez-vous "numériser" un annuaire téléphonique à la recherche d'un numéro ou utiliser l'index?

+2

Nous avons écouté la requête autant que possible. Malheureusement, il n'y a que peu de choses que vous pouvez faire pour accélérer le processus consistant à extraire 15 000 enregistrements d'une table de 2 millions d'enregistrements via un serveur lié. –

+0

modifier votre question et inclure la sortie de SET ShowPlan_All ON –

+1

@Jason Baker, j'ai beaucoup de requêtes qui se joignent sur plusieurs tables avec plus de lignes que vos 2 millions, et ils courent beaucoup plus vite que 30 secondes. Vous dites "Nous avons réglé la question autant que nous le pouvons", et c'est pourquoi j'offrais mon aide. –

Questions connexes