SQL Server 连接数量有限制吗?

23

我正在使用SQL Server 2008 Enterprise + C# + ADO.Net + .Net 3.5,使用sp_who2或sys.dm_exec_connections查找活动连接数(如果我的查找活动连接数的方法有误,请告诉我)。对于一些大型数据库消费应用程序,我甚至可以找到活动连接数> 1000。

我想知道SQL Server活动连接数是否有任何上限限制?

谢谢, 乔治

2个回答

28

这是一个按实例而非数据库配置的设置。您可以在sys.configurations中检查当前值,并使用sp_configure更改它。相关选项是user connections

使用“user connections”选项指定在 Microsoft SQL Server 上允许的最大并发用户连接数。实际上,允许的用户连接数也取决于您使用的 SQL Server 版本以及应用程序和硬件的限制。SQL Server 允许最多 32,767 用户连接。

1000个连接并不是一个过高的数字。在高端系统上,服务器可以监听多个口与 NUMA 节点关联,并且每个节点可以连接数百或数千个客户端。

请注意,连接数与请求数不同,即主动执行某些操作的连接数,sys.dm_exec_requests。每个请求需要一个或多个工作线程,而工作线程的数量是使用max worker threads选项进行配置的。


1
我也是 :) 我总是认为32k+用户插槽永远不会成为问题,但这些细节确实很好。 - Keith Adler
谢谢Nissan,我研究了以下链接http://msdn.microsoft.com/en-us/library/ms143432.aspx,我最困惑的是--“每个客户端连接”和“用户连接”之间的区别是什么? - George2
  1. 我对你的评论感到困惑--“connections actively executing something, sys.dm_exec_requests”。这里的“something”是什么意思?你是指“something”就是“sys.dm_exec_requests”吗?
  2. 如果没有使用MARS,我认为连接数应该与请求数相同。这个理解正确吗?有什么意见吗?
- George2
2
"something" 意味着发送到服务器的 SQL 批处理(即一个 '请求')。只要客户端保持连接打开,连接就会一直存在。从批处理到达服务器开始,直到结果发送回客户端之前,请求才存在。可以在 sys.dm_exec_requests 中看到这些请求。 - Remus Rusanu
1
定义“活动连接”。sp_who将显示没有连接的系统任务(如懒惰写入器、幽灵写入器、资源监视器等)。sys.dm_exec_connections将显示不执行任何内容的连接。此外,sys.dm_exec_connections还显示非T-SQL连接,例如镜像连接,您必须过滤掉基于protocol_type的连接。 - Remus Rusanu
显示剩余4条评论

3

我的查找活动连接数的方法正确吗?如果是,您的意思是我找到的数字不应超过32,767吗? - George2
我只是想确保我找到的连接数与你所说的是一样的。 :-) - George2
从您所提到的 MSDN 文档中,我最困惑的是 —— “每个客户端连接数”和“用户连接”之间有什么区别? - George2
1
我刚刚使用了两个数据库进行测试,发现最大连接数被限制为16K。这意味着该数字不是针对每个数据库的,而是似乎受SQL实例的限制。 - vbguyny
Eve Online在其非分片数据库上已经拥有超过60,000个并发用户。 - Charles Burns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接