是否存在到SQL Server的最大连接限制
本文关键字:连接 存在 SQL Server 是否 | 更新日期: 2023-09-27 18:24:04
我使用ADO.NET和SQL Server 2008完成了桌面应用程序。我计划在10台计算机上运行我的应用程序,这些计算机通过本地网络连接到Windows7计算机上的SQL Server数据库。
如果所有计算机都同时运行,会有什么问题吗?
SQL Server连接池呢?
请注意,当我尝试使用以下命令在SQL Server上查找数据库的活动连接时:
sp_who
我发现了20多个活动连接。
这会造成问题吗?
如果您只关注十个客户端,SQL Server应该能够处理这些客户端
除此之外,这只是为这种负载进行设计的问题。例如,您希望确保在正确的时间进行正确的锁定。本质上,让多个并发客户端访问同一数据库与让多个并行线程在一台机器上访问相同的变量是一样的。数据库比int
更智能,但你仍然需要确保你掌握事情的进展。
例如,假设您有一个要完成的Tasks
的表,它有一列用于ID
,一列用于LastCompleted
时间。在单个客户端上,您可能想要编写这样的访问内容:
- 获取下一个具有
LastCompleted < DATEADD(HOUR, -1, GETDATE())
的 - 做那项需要五分钟的任务
UPDATE
设置LastCompleted = GETDATE()
的表
然后你可以很容易地每小时完成所有任务。
但是,如果您面临多个客户端访问,这将导致多个客户端多次获取同一任务,并同时执行。在这种情况下,您可能希望另一列将InProgressAsOf
指示为日期,然后您可以根据需要重试孤立任务,但永远不会有发生重叠的风险。即便如此,您也可能希望在UPDATE
上使用OUTPUT
子句,以确保它都是原子的。
- 从
UPDATE Tasks SET InProgressAsOf = GETDATE() OUTPUT DELETED.* WHERE LastCompleted < DATEADD(HOUR, -1, GETDATE()) AND InProgressAsOf < DATEADD(MINUTE, -10, GETDATE())
获取结果 - 做那项需要五分钟的任务
UPDATE
设置LastCompleted = GETDATE()
的表
但是,是的,只要你掌握了多线程操作的细微差别,你就可以在同一个数据库上运行十个并发连接。
对于运行SQL Server的Windows 7:
似乎只允许20个来自其他设备的同时连接。(来源)然而,根据这20台设备上运行的应用程序,可能会启动更多的连接,这可能会导致您看到的情况。
此外,请确保在必要时正确关闭应用程序中的连接,而不是不必要地打开连接。
对于任何Windows Server操作系统,如果您更需要同时连接,则以下内容适用:
从如何:设置用户连接(SQL Server Management Studio)-MSDN
设置用户连接
在对象资源管理器中,在服务器上单击鼠标右键,然后单击"属性"。
单击"连接"节点。
在"连接"下的"最大并发连接数"框中,键入或选择0到32767之间的值以设置最大连接数允许同时连接到的实例的用户数SQL Server。
重新启动SQL Server。
因此,最大连接数为32767,SQL Server 2014也是如此。
您也可以运行sp_configure
来获得当前运行值。