是否存在对SQL Server的最大连接限制

时间:2014-09-23 23:42:22

标签: c# sql-server sql-server-2008 ado.net database-connection

我使用ADO.NET和SQL Server 2008完成了桌面应用程序。我计划通过本地网络在连接到Windows 7计算机上的SQL Server数据库的10台计算机上运行我的应用程序。

如果所有计算机同时运行,是否有任何问题?

那么SQL Server连接池呢?

请注意,当我尝试使用此命令在SQL Server上查找数据库的活动连接时:

sp_who

我找到了20多个活动连接。

这会导致问题吗?

2 个答案:

答案 0 :(得分:0)

对于运行SQL Server的Windows 7:

似乎只允许来自其他设备的20个并发连接。(Source)但是,根据这20个设备上运行的应用程序,可能会启动更多连接,这可能会导致您见。

另外,请确保您正确关闭应用程序中的连接,并且不要让连接断开。

对于任何Windows Server操作系统,以下情况适用于您需要同时连接的情况:

来自How to: Set User Connections (SQL Server Management Studio) - MSDN

  

设置用户连接

     
      
  1. 在对象资源管理器中,右键单击服务器,然后单击“属性”。

  2.   
  3. 单击“连接”节点。

  4.   
  5. 在“连接”下的“最大并发连接数”框中,键入或选择0到32767之间的值以设置最大数量   允许同时连接到实例的用户   SQL Server。

  6.   
  7. 重新启动SQL Server。

  8.   

因此,最大连接数为32,767,这在SQL Server 2014中也是如此。

您也可以运行sp_configure来获取当前的运行值。

答案 1 :(得分:0)

如果您只关注十个客户端,SQL Server应该能够处理它。

除此之外,这只是设计这种负载的问题。例如,您希望确保在正确的时间发生了正确的锁定。本质上,让多个并发客户端访问同一个数据库与在同一台机器上访问相同变量的多个并发线程相同。比起int,数据库有点聪明,但是你仍然希望确保自己处理事情的发生。

例如,假设您有一个要完成的Tasks表,并且它有ID的列和LastCompleted时的列。在单个客户端上,您可能希望编写一些可以访问它的内容:

  1. 获取具有LastCompleted < DATEADD(HOUR, -1, GETDATE())
  2. 的下一个
  3. 执行该任务,需要五分钟
  4. UPDATE要设置LastCompleted = GETDATE()
  5. 的表格

    然后,您可以非常轻松地每小时完成所有任务。

    但是,如果您遇到多个客户端访问,这将导致多个客户端多次抓取同一任务,并同时执行此操作。在这种情况下,您可能希望另一列指示InProgressAsOf作为日期,然后您可以根据需要重试孤立的任务,但您永远不会冒重叠事件的风险。即便如此,您可能希望在OUTPUT上使用UPDATE子句来确保它们都是原子的。

    1. UPDATE Tasks SET InProgressAsOf = GETDATE() OUTPUT DELETED.* WHERE LastCompleted < DATEADD(HOUR, -1, GETDATE()) AND InProgressAsOf < DATEADD(MINUTE, -10, GETDATE())
    2. 获取结果
    3. 执行该任务,需要五分钟
    4. UPDATE要设置LastCompleted = GETDATE()
    5. 的表格

      但是,是的,只要您处于多线程操作的细微差别之上,就可以很好地针对同一个数据库运行十个并发连接。