我在 Windows Server 2008 机器上运行 SQL Server 2008 R2 SP1。我有一个从 Visual Studio 2010 运行的 .NET 脚本,它执行以下操作:
- 进入数据库
- 做出改变
- 迭代
它将迭代的总次数是 150,但是它停止在 100 个连接处,我不知道为什么。我可以将我的脚本调整为只使用一个线程,但我更愿意知道我在哪里缺少最大连接设置,因为这对于将来的参考更有用。
这是我到目前为止检查过的地方:
- Visual Studio 2010 中的 SQL 连接字符串(设置为 1000)
- SSMS 数据库实例连接属性(设置为 0 [infinity] 用户连接)
- 用 Google 搜索了一些关于 Server 2008 的信息,看起来它可以处理 100 多个连接
- 逐步浏览我的代码,
SP_WHO2
其中提供了有关逻辑连接的更多信息,看到连接数从 52 开始,并且脚本错误在 152 个逻辑连接处出现“达到最大池连接”错误。 - 更改了要使用的连接字符串
Data Source=PerfSQL02;Initial Catalog=Masked;Integrated Security=True;Max Pool Size=1000
我不知道还能去哪里检查,我知道我这里有很多活动部件,但我感觉我只是在某个地方错过了最大池设置。
在您的连接字符串中,指定
max pool size=<your desired max pool size>
. 换句话说,如果您想将最大池大小更改为值 500,您的连接字符串可能类似于以下内容:显然,我对您的其他参数做了很多假设,但这应该让您对如何进行有一个好主意。连接池是客户端提供程序强制执行。客户端需要通过连接字符串指定此最大池大小设置。
此外,请确保您正确关闭或处理您的连接,否则您将占用连接。像这样的东西(C#):
块(在
using
C# 中)IDisposable.Dispose()
在完成时调用。你也可以在一个块的块中实现SqlConnection.Dispose()
或。SqlConnection.Close()
finally
try/catch/finally
参考: 关于 SqlConnection.ConnectionString 属性的 MSDN 文档
默认情况下,SQL Server 最多允许32767 个连接。它可以使用
sp_configure
. 要查看此设置的当前配置,请使用以下查询:默认情况下,您应该看到最大值为 32767,
value_in_use
等于 0(使用默认设置)。如果这已被更改,您可以重新配置 SQL Server 以使用链接中描述的其他值。您还应该查看实际建立了多少连接,因为在您的应用程序之外可能有更多的活动(或者您的应用程序建立的连接比您想象的要多)。您将需要在perfmon中查看 General Statistics -> Logical Connections或查询中的值
sys.dm_os_performance_counters
(cntr_value 将显示当前时间点值):