J'exécute SQL Server 2008 R2 SP1, sur une boîte Windows Server 2008. J'ai un script .NET exécuté à partir de Visual Studio 2010 qui fait ce qui suit:
- Atteint la base de données
- Fait un changement
- Itère
Le nombre total de fois qu'il itérera est de 150, mais il s'arrête à 100 connexions et je ne peux pas comprendre pourquoi. Je pourrais ajuster mon script pour n'utiliser qu'un seul thread, mais je préférerais savoir où il me manque un paramètre de connexion max car cela sera plus utile de le savoir pour référence future.
Voici où j'ai vérifié jusqu'à présent:
- Chaîne de connexion SQL dans Visual Studio 2010 (elle est définie sur 1000)
- Propriétés de connexion de l'instance de base de données SSMS (elle est définie sur 0 [infini] connexions utilisateur)
- Googlé quelques informations sur Server 2008, il semble qu'il puisse gérer plus de 100 connexions
- J'ai parcouru mon code à côté de
SP_WHO2
ce qui donne plus d'informations sur les connexions logiques, car le nombre de connexions commence à 52 et les erreurs de script avec l'erreur "Max Pooled Connections atteint" à 152 connexions logiques. - Modification de la chaîne de connexion à utiliser
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
Je ne sais pas où vérifier, je sais que j'ai beaucoup de pièces mobiles ici, mais j'ai l'impression qu'il me manque un paramètre de piscine max quelque part.
sql-server
Sean Long
la source
la source
System.Data.SqlClient
défaut est 100, c'est pourquoi vous voyez l'épuisement du pool de connexions).Réponses:
SQL Server autorise un maximum de 32767 connexions par défaut. Il peut être modifié à l'aide de
sp_configure
. Pour afficher votre configuration actuelle pour ce paramètre, utilisez la requête suivante:Par défaut, vous devriez voir un maximum de 32767,
value_in_use
égal à 0 (utilisez les paramètres par défaut). Si cela a été modifié, vous pouvez reconfigurer SQL Server pour utiliser d'autres valeurs comme décrit dans le lien.Vous devez également vérifier le nombre de connexions réellement établies, car il pourrait y avoir plus d'activité en dehors de votre application (ou votre application établit plus de connexions que vous ne le pensez). Vous voudrez regarder Statistiques générales -> Connexions logiques dans perfmon ou interroger les valeurs dans
sys.dm_os_performance_counters
(cntr_value affichera la valeur actuelle du point dans le temps):la source
Dans votre chaîne de connexion, spécifiez
max pool size=<your desired max pool size>
. En d'autres termes, si vous souhaitez modifier la taille maximale du pool à la valeur 500, votre chaîne de connexion pourrait ressembler à ceci:Évidemment, je suppose beaucoup avec vos autres paramètres, mais cela devrait vous donner une bonne idée de la façon de procéder. Le regroupement de connexions est l'application du fournisseur côté client. C'est le client qui devra spécifier ce paramètre de taille maximale de pool, via la chaîne de connexion.
Assurez-vous également que vous fermez ou éliminez correctement vos connexions, sinon vous les bloquerez. Quelque chose comme ça (C #):
Le
using
bloc (en C #) appelleIDisposable.Dispose()
à la fin. Vous pouvez également implémenterSqlConnection.Dispose()
ouSqlConnection.Close()
dans lefinally
bloc d'untry/catch/finally
bloc.Référence: documentation MSDN sur la propriété SqlConnection.ConnectionString
la source
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
SqlConnection.ConnectionString
l'opération particulière. Ce serait le moyen le plus simple. S'ilmax pool size
n'y en a pas, c'est 100 alors.