Plus de 100 connexions à sql server 2008 en “sommeil” statut
J'ai un gros problème ici, bien à mon serveur.
J'ai une page ASP .net web (framework 4.x) en cours d'exécution sur mon serveur, toutes les transactions/select/update/insert sont faites avec ADO.NET.
Le problème est que, après avoir été en utilisant pendant un moment (un couple de mises à jour/sélectionne/inserts) parfois, j'ai eu plus de 100 connexions sur "dormir" au statut de vérifier les connexions à sql server avec cette requête:
SELECT
spid,
a.status,
hostname,
program_name,
cmd,
cpu,
physical_io,
blocked,
b.name,
loginame
FROM
master.dbo.sysprocesses a INNER JOIN
master.dbo.sysdatabases b ON
a.dbid = b.dbid where program_name like '%TMS%'
ORDER BY spid
J'ai été vérifier mon code et en fermant chaque fois que je fais un lien, je vais tester la nouvelle classe, mais j'ai peur que le problème n'est pas résolu.
Il suppose que la connexion de regroupement, de garder les connexions à utiliser de nouveau, mais jusqu'à ce que je vois ne pas ré-utiliser toujours.
Toute idée en dehors de la vérification pour fermer toutes les connexions ouvertes après les utiliser?
RÉSOLU(maintenant j'ai une belle connexion sur le "sommeil", statut):
En plus de la réponse de David Stratton, je tiens à partager ce lien qui expliquent très bien comment le pool de connexion cela fonctionne: http://dinesql.blogspot.com/2010/07/sql-server-sleeping-status-and.html
Juste pour être court, vous devez fermer toutes les connexions sql (objets de connexion) afin que le pool de connexion peut ré-utiliser la connexion et de l'utilisation de la même connectinos chaîne, pour s'assurer que c'est fortement recommandé d'utiliser l'un des webConfig.
Être prudent avec dataReaders vous devez fermer sa connexion (c'est ce que me rendre fou pour tout).
OriginalL'auteur Allende | 2011-09-26
Vous devez vous connecter pour publier un commentaire.
On dirait qu'elle est le regroupement de connexion.
À partir d'ici: http://msdn.microsoft.com/en-us/library/8xx3tyca.aspx
Pour vous assurer que vous n'êtes pas créer d'inutiles piscines, de s'assurer que la même chaîne de connexion est utilisé chaque fois que vous vous connectez magasin dans le .fichier de configuration.
Vous pouvez également réduire la Taille Maximale du Pool si vous le souhaitez.
En fait, je le recommande il suffit de lire l'intégralité de l'article lié ci-dessus. Il parle de compensation de la piscine, et vous donne les meilleures pratiques pour l'utilisation de la mise en commun correctement.
Modifier ajoutée le lendemain
Les piscines de votre serveur sont là à cause de la façon dont la Connexion de mise en commun des travaux. Par la documentation liée à ci-dessus:
Cela signifie que le serveur sera de nettoyer ces piscines finalement, s'ils restent inutilisés. Si les ne sont PAS nettoyés,l qui signifie que le serveur croit que les connexions sont toujours en cours d'utilisation, et s'accrochent à augmenter vos performances.
En d'autres termes, je ne serais pas s'inquiéter à ce sujet, sauf si vous voyez un problème. Le Regroupement de connexion se passe exactement comme il devrait être.
Si vous voulez VRAIMENT effacer les piscines, de nouveau, par la documentation:
Cependant, si vous souhaitez ajuster le regroupement, la Chaîne de Connexion peut être modifié. Voir cette page, et de chercher le mot "piscine":
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx
Ou vous pouvez engager un DBA afin d'aider et de définir de mise en commun au niveau du serveur. C'est hors-sujet ici, mais ServerFault.com pourriez avoir des gens à aider.
Je suppose que toutes les réponses sont ici, msdn.microsoft.com/en-us/library/... je suis désolé. Je vais vérifier et éventuellement mise à jour de la question.
Je ne peux pas juste trouver la bonne façon d'utiliser la même chaîne de connexion" - je l'utiliser à partir du web config maintenant et toujours obtenir un grand nombre de connexion sur le statut de "dormir"
Vous êtes probablement en utilisant la même chaîne de connexion puis. Il signifie simplement que la chaîne elle-même est le même. Les paramètres dans le même ordre, sensible à la casse, etc. Par la documentation, vous pouvez avoir jusqu'à 100 piscines "pour chaque unique chaîne de connexion". si vous voulez moins de piscines, de réduire la Taille Maximale du Pool.
Salut, après un moment, je ne l'ai eu, j'ai encore une couple de SqlDataReader causer des problèmes, mais maintenant, j'ai juste 1 connexion en tant que "sommeil", je vais faire la mise à jour de la question avec un autre lien utile. Je vous remercie. c'est le lien: dinesql.blogspot.com/2010/07/... et encore Merci.
OriginalL'auteur David