关于SQLServer的最大连接数

本文通过编写代码测试SQLServer的最大并发连接数,并详细解释了如何通过连接池优化连接管理,同时提供了监测数据库并发数量的方法。测试结果显示,SQLServer在实际应用中的并发连接数受到硬件和内存限制,通过连接池技术可以显著提升连接数上限。
很多做架构设计、程序开发、运维、技术管理的朋友可能或多或少有这样的困惑:

 

  1. SQLServer到底支持多少连接数的并发?
  2. SQLServer是否可以满足现有的应用吗?
  3. 现有的技术架构支持多少连接数的并发?
  4. 在硬件性能与网络性能足够理想的情况下理论上可以支持多少并发连接?
  5. 生产环境中的数据库现在的并发量是多少?
  6. 如何监控现有数据库并发的数量?
  7. 生产环境中的并发量距离理论上的最大并量发还差多少?

为此,我专门写程序做了下测试,利用循环不断的打开连接并保持连接打开不关闭,测试代码如下:

 

using System;
using System.Collections.Generic;

namespace SQLServerMaxConnectionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            int maxCount = 40000;
            List<HotSpotEntities> collection = new List<HotSpotEntities>();
            for (int i = 0; i < maxCount; i++)
            {
                Console.WriteLine(string.Format("成功创建连接对象{0}",i));
                var db = new HotSpotEntities();
                db.Connection.Open();
                collection.Add(db);
            }
        }
    }
}


 

第一轮的测试结果令我比较吃惊。

 

当创建到101个连接的时候,就无法再创建新连接了。也就是说,如果连接字符串不做任何处理,我们的程序只能够跟SQLServer建立101个连接。测试结果截图如下:

 

 

第二轮测试,启用连接池。

 

在连接字符串中加入代码:

Pooling=true;Max Pool Size=40000;Min Pool Size=0;

连续若干次内存都被耗尽了,不过结果还算欣慰。

 

 

最高记录是29299,很显然不是最高记录,只因为我的笔记本内存有限,所以很难突破。

 

微软对最大连接数的定义


 

微软在MSDN上对最大连接数的定义是:“默认是0,代表不限制,但最大连接数是32767”。 如下图所示:

 

 有兴趣的朋友可以自己编写代码测试、分享一下。

 

如何监测SQLServer的连接数

 

SP_WHO 'loginName'
loginName 是当然登陆Sql的用户名,一般程序里面都会使用一个username来登陆SQL这样通过这个用户名就能查看到此用户名登陆之后占用的连接了。
如果不写loginName,那么返回的就是所有的连接。

既然连接数是可预测、可监测的,那么它就是可度量的,那么我们就可以根据实际情况来评估或测试程序的并发放量了。

 

有了这些,相信以上的困惑应该可以解开了吧。

 

<think>好的,我现在需要帮助用户解决关于SQL Server大连的合理设置问题。首先,我需要回顾用户提供的引用内容,看看有没有相关的信息。引用1提到了max server memory等参,但没有直提到大连。引用3提到用户曾经错误地将大并发连设为1,导致无法连后通过命令行修改回来,这说明了设置不当的后果。引用4讨论了连成功率和可能的问题,比如网络问题或配置错误,但同样没有直给出大连的建议。 用户的主要问题是询问如何合理设置SQL Server的大连,并希望得到配置建议。我需要结合已有的知识和引用中的信息来构建回答。首先,大连的默认值是0,也就是无限制,但实际情况下需要根据具体环境来调整。需要考虑的因素包括硬件资源(如内存、CPU)、应用程序的并发需求、连池的使用情况等。 根据引用3的教训,设置过小会导致连失败,所以应该避免。而设置过大可能会消耗过多资源,影响性能。通常建议根据应用程序的大并发需求加上一定的缓冲来设置。例如,如果应用峰值时有200个并发连,可以设置为250或300。 另外,引用4提到连成功率的问题,这可能与连设置有关。如果连不足,新的连请求会被拒绝,导致成功率下降。因此,合理设置大连有助于维持较高的连成功率。 还需要考虑连池的优化,如引用2中提到的优化连池和调整小连,这可能与应用程序的连管理有关。正确的连池配置可以减少对据库连的压力,从而允许更合理的大连设置。 后,应该建议用户监控当前的连使用情况,使用性能监视器或查询sys.dm_exec_sessions动态管理视图来了解实际需求,并根据监控结果进行调整。同时,提醒用户不要将大连设置得过低,以免引发连问题,如引用3中的情况。 总结回答的结构应该是:首先解释大连的作用,然后给出配置建议,包括默认值、影响因素、计算公式、监控方法和注意事项,后生成相关问题。确保使用中文,并正确应用引用标记。</think>### SQL Server大连配置建议 #### 1. 核心概念与默认设置 SQL Server的**大连**(`max user connections`)用于限制同时连据库实例的客户端量。默认值为`0`(表示无限制),但实际可用连受以下因素制约: - 服务器硬件资源(内存、CPU) - SQL Server版本限制(如Express版默认限制为32,767) - 操作系统支持的线程 #### 2. 配置建议公式 合理设置值可参考: $$ 建议值 = 峰值并发需求 \times (1.2 \sim 1.5) $$ 例如:若应用峰值并发为200,则建议设为240-300。需通过监控工具验证实际使用情况[^3]。 #### 3. 关键影响因素 | 因素 | 说明 | 关联配置 | |------|------|----------| | 内存容量 | 每个连约占用40KB基础内存 | `max server memory`[^1] | | 连池效率 | 有效复用连可降低总需求 | 应用程序连池配置[^2] | | 查询复杂度 | 长事务会延长连占用时间 | `cost threshold for parallelism`[^1] | #### 4. 监控与调优步骤 1. **查看当前使用情况**: ```sql SELECT COUNT(session_id) AS active_connections FROM sys.dm_exec_sessions WHERE is_user_process = 1 ``` 2. **设置预警阈值**:建议保留20%的余量应对突发流量 3. **动态调整**:生产环境修改前需在测试环境验证 4. **应急恢复**:若误设导致无法连,可通过`-m`单用户模式登录修改[^3] #### 5. 典型场景配置参考 | 场景 | 推荐值 | 说明 | |------|-------|------| | 开发/测试环境 | 200-500 | 避免资源浪费 | | 中型Web应用 | 800-1500 | 配合连池使用 | | 高并发OLTP | 3000+ | 需配合内存和CPU优化 | #### 6. 注意事项 - 连泄漏会快速耗尽连池,需配合`sys.dm_exec_connections`定期检查 - AlwaysOn可用性组等架构会影响实际可用连 - 云据库服务可能对连有额外限制
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值