2010-02-02 48 views
4

任何人都可以提供一個球場時間(以毫秒爲單位),從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

回答

9

這取決於:

  • 時間解析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

這取決於您要連接的數據庫以及它是本地還是跨網絡以及網絡速度。如果一切都是本地的,那麼可能是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 
3

你總是可以寫上去,打開你的服務器和時間,連接一些代碼。

喜歡的東西:

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

相關問題