测试四:连接速率
重用:设置max poolsize=40000,即连接池40000,数据库0(32767)。循环次数:40000
重建:设置max poolsize=4000,即连接池4000,数据库0(32767)。循环次数:4000
//重用:
var sqlConn = new SqlConnection(connstring);
sqlConn.Open();
sqlConn.Close();
//重建:
var sqlConn = new SqlConnection(connstring);
sqlConn.Open();
collection.Add(sqlConn);
| 测试一 | 测试二 | 测试三 | 测试四 | 测试五 | 测试六 | 测试七 | 测试八 | 平均(秒) |
重用40000 | 11.8 | 11.98 | 13.54 | 11.9 | 15.14 | 12.62 | 14.65 | 12.33 | 13 |
重建4000 | 38.64 | 42.24 | 43.50 | 45.37 | 38.27 | 41.52 | 43.66 | 44.07 | 42.16 |
如重建次数增加10倍为40000,,则平均时间比为 13:421,即重建/重用=32。重建连接比重用连接池所花费时间多31倍!
测试五:关闭连接池数据库会话状态
现在把连接池关闭 pooling=false,每次打开或者关闭连接时,console暂停。
for (int i = 0; i < maxCount; i++)
{
Console.WriteLine(string.Format("已创建连接对象{0}", i));
try
{
sqlConn.Open();
Console.WriteLine("已打开");
Console.ReadKey(true);
sqlConn.Close();
Console.WriteLine("已关闭");
Console.ReadKey(true);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
数据库查看session。(在c#连接我是sa登录的)
SELECT * FROM sys.dm_exec_sessions where session_id>50 AND login_name='sa'
SELECT * FROM sys.dm_exec_connections
WHERE session_id IN(SELECT session_id FROM sys.dm_exec_sessions where session_id>50 AND login_name='sa')
关闭连接时再查看。Session已经关闭了。下次再连接,就是新的一个物理连接了。
连接池连接数 | DB连接数 | 峰值错误信息 | 连接峰值 |
40000 | 0(32767) | 当前命令发生了严重错误,赢放弃任何可能产生的结果。 | 32717 |
3000 | 0(32767) | 超时时间已到,但是尚未从池中获取连接,出现这种情况可能是因为所有池连接均在使用,并达到最大池大小。 | 3000+ |
40000 | 3000 | 成功与服务器建立连接,但是在登录前的握手期间发生错误。(provider:tcp provider error:0 – 指定的网络名不可再用。) | 3000 |
| |||
关闭连接池 | 每次连接数据库都是一次物理连接,关闭连接时,数据库session也关闭 |
连接速率 | 测试一 | 测试二 | 测试三 | 测试四 | 测试五 | 测试六 | 测试七 | 测试八 | 平均(秒) |
重用40000 | 11.8 | 11.98 | 13.54 | 11.9 | 15.14 | 12.62 | 14.65 | 12.33 | 13 |
重建4000 | 38.64 | 42.24 | 43.50 | 45.37 | 38.27 | 41.52 | 43.66 | 44.07 | 42.16 |