SqlServer数据库连接数与客户端连接池关系测试(一)
来源:互联网 发布:c语言内存泄漏 编辑:程序博客网 时间:2024/04/28 02:20
连接池连接数
DB连接数
峰值错误信息
连接峰值
40000
0(32767)
?
?
3000
0(32767)
?
?
40000
3000
?
?
主要测试上面的结果,不多说了,直接操作吧!
测试代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient;namespace dbConnectionTest{ class Program { static void Main(string[] args) { int maxCount = 40000; string connstring = "Server=1card1-hzc;Database=mytest;User ID=sa;Password=sa;pooling=true;connection lifetime=0;min pool size = 1;max pool size=40000"; List<SqlConnection> collection = new List<SqlConnection>(); for (int i = 0; i < maxCount; i++) { Console.WriteLine(string.Format("已创建连接对象{0}", i)); try { var sqlConn = new SqlConnection(connstring); sqlConn.Open(); collection.Add(sqlConn);//保存连接对象 } catch (Exception e) { Console.WriteLine(e.Message); } } } }}
查看数据库设置的最大连接数,[userconnections] run_value=0(为0默认最大值32767)
测试一:
设置max poolsize=40000,即连接池40000,数据库32767。执行脚本!
监控可以看到,峰值为32717,加上数据库系统自己的50个连接,总数为32767,即为数据库的最大连接数。
(在连接过程中,CPU和内存开销很大!)
在出错的情况下还继续创建对象,但是数据库连接数是没有增加的,连接对象都保存到连接池中,等待连接数据库。
当连接池连接数达到最大值时,如下图到达39999时,程序自动关闭退出!本人电脑几乎卡死!数据库连接数回到正常,数据库内存仍然很到,还是很卡!最后重启数据库服务释放内存!继续下面的操作。
测试二:
设置max poolsize=3000,即连接池3000,数据库32767。执行脚本!
连接池最大连接为3000,再新建连接时,因超时不能添加到连接池中,失败!
数据库当前最多可连接32767,现在只连接3000+系统session,为3019,还可以继续连接,只是连接池限制。
正常业务情况下,连接池会尽快处理没有用的连接,让客户端建立新的连接。
在数据库中,我删除1000个sleeping的session:
declare @i intset @i = 1000while @i<2000beginexec('kill '+ @i)SET @i = @i + 1end
数据库连接是降下来了,但是连接池还是没有降。因为心的连接还是无法通过连接池。所有也不要删除数据库中sleeping的session,因为连接池如果再重用连接的话,找不到数据库中的对应连接就断开了!
测试三:
这次设置max poolsize=40000,即连接池40000,数据库3000。
数据库中执行以下代码,然后重启数据库服务:
EXEC sp_configure 'user connections',3000Reconfigure
运行脚本!
当通过连接池连接数据达到2982时,发生错误。加上数据库系统中的18个session,连接总数为3000.
这个错误网上很常见,连接池虽然可以继续创建新的连接,但是无法与数据库端连接。出现此错误可以判断是数据库端没法连接到。如果不是最大连接数出错,可能是tcp/ip协议未开启、端口未打开或被隔离等。。
成功与服务器建立连接,但是在登录前的握手期间发生错误。(provider:tcp provider error:0 –指定的网络名不可再用。)
接下来在数据库中,删除1000个sleeping的session:
declare @i intset @i = 1000while @i<2000beginexec('kill '+ @i)SET @i = @i + 1end
连接又可以正常进行了。
结果:
连接池连接数
DB连接数
峰值错误信息
连接峰值
40000
0(32767)
当前命令发生了严重错误,应放弃任何可能产生的结果。
32717
3000
0(32767)
超时时间已到,但是尚未从池中获取连接,出现这种情况可能是因为所有池连接均在使用,并达到最大池大小。
3000+系统
40000
3000
成功与服务器建立连接,但是在登录前的握手期间发生错误。
(provider:tcp provider error:0 – 指定的网络名不可再用。)
3000
参考:
http://www.cnblogs.com/lyhabc/articles/2797351.html
http://www.cnblogs.com/lyhabc/archive/2012/12/01/2797559.html
http://www.cnblogs.com/wlb/archive/2012/04/08/2437617.html
http://www.tuicool.com/articles/2y2EJb
http://www.uml.org.cn/net/201002053.asp
http://msdn.microsoft.com/zh-cn/library/8xx3tyca(VS.80).aspx
- SqlServer数据库连接数与客户端连接池关系测试(一)
- SqlServer数据库连接数与客户端连接池关系测试(二)
- SQLServer的最大连接数 的测试 和数据库连接池
- SQLServer数据库连接(一)
- ADO.NET数据库连接池研究(一) -查看连接池数
- sqlserver的最大连接数测试
- 客户端与服务端连接分析(一)
- 数据库连接数和数据库连接池的连接数区别?
- 连接数与端口数的关系
- 数据源,连接池,数据库连接之间的关系
- 数据源,连接池,数据库连接之间的关系
- 查看当前SqlServer数据库连接数
- C#与sqlServer数据库连接
- C#与SQLServer数据库连接
- 数据库连接池最小连接数和最大连接数:
- IIS并发连接数和数据库连接池
- java数据库连接及测试(sqlserver)
- SQLSERVER的客户端连接(java web)
- AX 2012 SSRS 报表发布
- c语言(2)(函数)
- Nest .net client 使用简要说明
- 【二分图|最大匹配】ZOJ-1516 Uncle Tom's Inherited Land
- ListView 中addHeaderView的使用方法
- SqlServer数据库连接数与客户端连接池关系测试(一)
- 自动切换英文输入法,并保存原输入法
- 设计模式 (三)
- 共享式以太网与交换式以太网的性能比较(OPNET网络仿真实验)
- AI制图
- 创建各种证书
- 解决编译Apache出现的问题:configure: error: APR not found . Please read the documentation
- mmm错误:没有规则可以创建 需要的目标(No rule to make target)
- 从Google身上可以学到的14个东西