测试SQL的默认连接数是100和最大连接数是32767
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data; using System.Data.SqlClient; using System.Configuration; namespace 测试SQL最大连接数 { class Program { static void Main(string[] args) { string strConn = ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString; string strConnMaxValue = ConfigurationManager.ConnectionStrings["MyConnStrAddPoolMaxValue"].ConnectionString; //设置了40000也没用,最大就是32767 //int maxCount = 40000; // List<SqlConnection> collection = new List<SqlConnection>(); // for (int i = 0; i < maxCount; i++) // { // Console.WriteLine(string.Format("成功创建连接对象{0}", i)); // var db = new SqlConnection(strConn); // db.Open();//只能输出到100,然后等了15秒后报错了。 // collection.Add(db); // } //第二段,开启了最大连接数为30000多 int maxCount = 40000; List<SqlConnection> collection = new List<SqlConnection>(); for (int i = 0; i < maxCount; i++) { Console.WriteLine(string.Format("成功创建连接对象{0}", i)); var db = new SqlConnection(strConnMaxValue); db.Open(); collection.Add(db); } } } }
自己测试的时候大概是32712 报错 了
参考:http://www.cnblogs.com/wlb/archive/2012/04/08/2437617.html
很多做架构设计、程序开发、运维、技术管理的朋友可能或多或少有这样的困惑:
- SQLServer到底支持多少连接数的并发?
- SQLServer是否可以满足现有的应用吗?
- 现有的技术架构支持多少连接数的并发?
- 在硬件性能与网络性能足够理想的情况下理论上可以支持多少并发连接?
- 生产环境中的数据库现在的并发量是多少?
- 如何监控现有数据库并发的数量?
- 生产环境中的并发量距离理论上的最大并量发还差多少?
为此,我专门写程序做了下测试,利用循环不断的打开连接并保持连接打开不关闭,测试代码如下:
1 using System;
2 using System.Collections.Generic;
3
4 namespace SQLServerMaxConnectionTest
5 {
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 int maxCount = 40000;
11 List<HotSpotEntities> collection = new List<HotSpotEntities>();
12 for (int i = 0; i < maxCount; i++)
13 {
14 Console.WriteLine(string.Format("成功创建连接对象{0}",i));
15 var db = new HotSpotEntities();
16 db.Connection.Open();
17 collection.Add(db);
18 }
19 }
20 }
21 }
2 using System.Collections.Generic;
3
4 namespace SQLServerMaxConnectionTest
5 {
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 int maxCount = 40000;
11 List<HotSpotEntities> collection = new List<HotSpotEntities>();
12 for (int i = 0; i < maxCount; i++)
13 {
14 Console.WriteLine(string.Format("成功创建连接对象{0}",i));
15 var db = new HotSpotEntities();
16 db.Connection.Open();
17 collection.Add(db);
18 }
19 }
20 }
21 }
第一轮的测试结果令我比较吃惊。
当创建到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,那么返回的就是所有的连接。
loginName 是当然登陆Sql的用户名,一般程序里面都会使用一个username来登陆SQL这样通过这个用户名就能查看到此用户名登陆之后占用的连接了。
如果不写loginName,那么返回的就是所有的连接。
既然连接数是可预测、可监测的,那么它就是可度量的,那么我们就可以根据实际情况来评估或测试程序的并发放量了。
有了这些,相信以上的困惑应该可以解开了吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决