L'augmentation de la Piscine Max Taille et de la performance
Dans mon ASP.net site web, j'ai une connexion à une base de données SQL Server Express. Et parfois, je fais beaucoup d'erreurs comme
Système.InvalidOperationException: Délai d'attente expiré. Le délai écoulé avant l'obtention d'une connexion à partir de la piscine. Cela peut avoir lieu, car toutes les connexions ont été mis en commun dans l'utilisation et max de la taille du pool a été atteint.
Après de chercher l'erreur, j'ai trouvé qu'il peut être dû à unclosed les connexions SQL Server. Mais j'ai utilisé les connexions SQL Server correctement et j'ai éliminés correctement.J'ai utilisé à l'aide de l'instruction de disposer de la connexion. Dans mon application, je reçois beaucoup de demandes (les connexions de base de données SQL Server), à une heure de pointe de la journée.
Donc, je suis à la planification pour augmenter le max de la taille du pool. Maintenant, je n'ai pas précisé dans ma chaîne de connexion. De sorte qu'il sera à 100 (valeur par défaut). Je suis la planification d'augmenter jusqu'à 20 000 de sorte que je ne vais pas l'erreur.
Afin d'accroître au maximum la taille du pool de ce nombre va causer un problème? Une façon d'accroître le max de la piscine sera la cause de tout problème de performance?
EDIT:
Ci-dessous est un échantillon de la façon dont j'ai utilisé Using
dans mon code
Using con1 As New SqlConnection
con1.ConnectionString = "" //conn string here
con1.Open()
doSomething()
End Using
Using con2 As New SqlConnection
con2.ConnectionString = "" //conn string here
con2.Open()
doSomething()
Using con3 As New SqlConnection
con3.ConnectionString = "" //conn string here
con3.Open()
doSomething()
End Using
End Using
Catch ex As Exception
End Try
EDIT:
Je viens de tester par la mise en au Max de la taille du pool de 20000 dans mon application pour vérifier si max la piscine est vraiment la cause du problème.Je m'attendais à ne pas obtenir cette exception, pas plus. Mais elle ne résout pas le problème ou peut ne pas être la raison de l'erreur. Après le réglage max piscine aussi j'ai eu d'erreur ci-dessus est environ 50 fois dans une durée de 3 heures. Donc je doute est-il vraiment dû à la taille du pool? Le message d'erreur indique que "Cela peut avoir lieu, car toutes les connexions ont été mis en commun dans l'utilisation et max de la taille du pool a été atteint". Donc, il y a tous les autres cas où le même message d'erreur affiché sur l'écran? S'il vous plaît aider.
- L'augmentation de la taille du pool sera juste lutter contre les symptômes de ne pas le cœur du problème. Je soupçonne que vous n'utilisez pas le
using
-déclaration à alwayws fermer la connexion dès que possible, ne vous? En outre, éviter les connexions en général, le tout dans ASP.NET. Combien de temps prendre de vos requêtes, vous devriez peut-être aussi de les optimiser. - Cependant, il semble que SQL Server express a certaines limitations (comme on le CPU), ce qui peut provoquer ce problème: stackoverflow.com/questions/1504147/...
- Pourriez-vous nous montrer un peu de code de la façon dont vous ouvrez et fermez votre connexion DB?
- J'ai eu un problème similaire et j'ai trouvé this utile.
- oui, je suis en utilisant "Utilisation de la connexion en tant Que New SqlConnection(connectionString)" et "la Fin de l'Aide" correctement. Je suis avec windows server 2008 r2 OS.
- Oui j'ai toujours utiliser l'Aide et endusing dans mon code
- Donc ne la définition de plus de la taille du pool sera la cause de tout -ve d'impact sur la performance?
- Aussi s'il vous plaît vérifier mon édité question
- existe-il des boucles? Pourquoi est -
con3
imbriquée danscon2
? Est leCatch
vraiment vide, si oui, pourquoi? - Catch n'est pas vide, il a eu une erreur de la remise méthode où j'ai du journal les erreurs dans un tableau. Il n'y a pas de boucles , si les condition sont présents
- même après l'augmentation de max pool d'erreur n'a pas à résoudre.pls voir mon édité question
- j'ai répondu à u dans mes commentaires avant. Je n'ai qu'à certaines conditions et de simples codes n'ont pas toutes les boucles for.Aussi j'utilise à l'aide de déclaration, comme indiqué dans la question
- Je suis plus intéressé à savoir le problème, ce qui provoque une erreur et de le résoudre.Pour résoudre l'erreur que j'ai augmenté le max de la taille du pool à 20000 et aussi je viens de mettre en timeout à 0.Mais toujours l'erreur persiste. Donc, ce qui est peut-être en raison de l'erreur?Aussi plz ont un coup d'oeil à mes commentaires précédents
- Nous avons à nouveau vérifié code complet et n'a trouvé aucune erreur dans l'élimination de la connexion nous avons également utilisé à l'aide de déclaration. Donc, toujours des erreurs sont à venir à temps aléatoire. Comment faire pour résoudre maintenant?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez augmenter la taille du pool si vous le souhaitez. Il y a deux inconvénients:
Je vous recommande d'aller plus haut, plus lentement. Ne pas augmenter la taille du pool de 20k immédiatement. Pensez à ce que 20k connexions signifierait: Cela signifierait environ 20k threads (ou moins si un seul thread utilise plus d'une connexion) s'exécutant en même temps. Si vous êtes dans cette situation vous avez probablement des problèmes de charge.
Pourquoi avez-vous même pas besoin que beaucoup de connexions? Pour les applications web, vous devez habituellement seulement une connexion ouverte, en même temps par l'exécution de la demande. Quelques centaines devrait être suffisant pour la plupart des cas.
Essayer de raccourcir la durée de chaque connexion doit être ouvert.