需要多长时间才能创建到SQL的新数据库连接

需要多长时间才能创建到SQL的新数据库连接

问题描述:

任何人都可以提供一个球场时间(以毫秒为单位),从C#建立到SQL的新数据库连接需要多长时间。即连接池必须创建新连接时的开销是多少?需要多长时间才能创建到SQL的新数据库连接

+0

http://wiki.answers.com/Q/How_long_is_a_piece_of_string – Ian 2010-02-04 16:33:48

+0

谢谢 - 我意识到我的问题是相当开放式的,但答案是优秀的,详细的。谢谢。伊恩的答案是最有趣的! – Pawel 2010-02-04 18:47:28

这取决于:

  • 时间解析DNS名称IP
  • 时候打开TCP套接字或网络管(其他TCP SOKET的顶部):一般为3个的IP数据包
  • 如果需要加密,则需要使用SSL/TLS进行hanshake:如果SSL/TLS密钥信息未被重用(即,一次RSA私钥访问非常昂贵,则需要5次往返时间加上主密钥交换)
  • 时间为SQL身份验证验证SQL密码(我相信2往返)
  • 时间验证NTLM/Kerberos进行集成AUTH(1个roundrip协商SPNEGO,5-6往返如果路沿石车票丢失,1个roundtip如果票证是本,如果NTLM选择4-5往返)
  • 时间授权登录(查找metdata,评估对登录令牌权限)
  • 的时间内运行的任何登录触发器
  • 时间启动连接(1个往返与inital SET会话东西批次)

一些更深奥的时代:

  • 时间来打开自动关闭数据库如果在请求(可以包括恢复,usualy没有)指定
  • 时间附着数据库如果使用AtachDBFile和db尚未连接
  • 时间为SQL 2005 RANU启动一个“用户”实例。大约40-60秒。

通常你可以每秒做10-15个新的连接。如果存在问题(例如DNS查找问题,IPsec发布,SSL问题,Kerberos问题),则每个连接可以轻松升级10-15秒。

相比之下,现有的池式连接只需执行sp_resetconnection(即现有通道上的一次往返),甚至可以根据需要避免这种情况。

+0

顺便提一下,SQL Server的时间是特定于SQL Server的,我认为OP的意思是'连接到SQL' – 2010-02-03 00:24:31

+0

感谢您的详细解答 – Pawel 2010-02-04 18:47:46

这取决于您要连接的数据库以及它是本地还是跨网络以及网络速度。如果一切都是本地的,那么可能是1或2毫秒(同样取决于DBMS)。如果更现实的说,它是通过局域网,它仍然可以非常快。下面是一个简单的例子连接到服务器上的不同的子网(一跳我认为):

 for (int i = 0; i < 5; i++) 
      { 
      Stopwatch timeit = new Stopwatch(); 
      timeit.Start(); 
      AdsConnection conn = new AdsConnection(@"Data Source = \\10.24.36.47:6262\testsys\;"); 
      conn.Open(); 
      timeit.Stop(); 
      Console.WriteLine("Milliseconds: " + timeit.ElapsedMilliseconds.ToString()); 
      //conn.Close(); 
      } 

以下是它打印的时间。第一个是加载程序集和各种DLL的代价。随后的有只有新连接的初始化进行的测量:

Milliseconds: 99 
Milliseconds: 5 
Milliseconds: 4 
Milliseconds: 4 
Milliseconds: 4 

你总是可以写上去,打开你的服务器和时间,连接一些代码。

喜欢的东西:

StopWatch timer = new StopWatch(); 

timer.Start(); 
for(int i=0;i<100;++i) 
{ 
    using(SqlConnection conn = new SqlConnection("SomeConnectionString;Pooling=False;")) 
    { 
     test.Open(); 
    } 
} 
timer.Stop(); 
Console.WriteLine(test.Elapsed.Milliseconds/100); 

这会得到的平均时间打开和关闭100个连接。请注意,我没有运行上面的代码

编辑:根据理查德Szalay的评论禁用连接池。否则,结果将是歪曲

+2

您需要禁用此测试的连接池以产生结果。 – 2010-02-03 15:38:36