分享方式:


追蹤 資料庫引擎 上的網路連線關閉順序

本文提供網路追蹤範例,此追蹤會在用戶端應用程式與 SQL Server 資料庫引擎 (伺服器) 之間的傳輸控制通訊協定 (TCP) 連線關閉期間擷取序列。 了解這些模式對於診斷網路行為、識別共用策略,以及優化 Web 或服務應用程式中的連線管理至關重要。

關閉連線類型

本文提供一般 TCP 連線和多個作用中結果集 (MARS) 連線的範例。 MARS 是 SQL Server 的一項功能,由 SQL Server 2005 (9.x) 引進,可在連接上執行多個命令,而不需要先清除第一個命令的結果,再執行第二個命令。 MARS 是透過會話多任務處理 (SMUX) 來達成。

本節說明關閉網路連線的數個範例。

  • 用戶端IP位址為 10.10.10.104
  • 伺服器IP位址為 10.10.10.22

關閉封包

此範例顯示一般連接關閉順序。 請注意低幀數和時間位移。 此序列很可能是集區連線關閉。 這應該會在追蹤開頭的 30 秒內發生,或者您可能也會看到 keep-alive 封包。

四向 TCP 工作階段關閉的圖表。

Frame Offset    Source IP    Dest IP      Description
----- --------- ------------ ------------ ---------------------------------------------------------------------------
   50 4.1529661 10.10.10.104  10.10.10.22 TCP:Flags=...A...F, SrcPort=4657, DstPort=1433, PayloadLen=0, Seq=413460761
   51 4.1529661  10.10.10.22 10.10.10.104 TCP:Flags=...A...., SrcPort=1433, DstPort=4657, PayloadLen=0, Seq=280398321
   52 4.1529661  10.10.10.22 10.10.10.104 TCP:Flags=...A...F, SrcPort=1433, DstPort=4657, PayloadLen=0, Seq=280398321
   54 4.2330441 10.10.10.104  10.10.10.22 TCP:Flags=...A...., SrcPort=4657, DstPort=1433, PayloadLen=0, Seq=413460761

Transact-SQL 語句和關閉封包

此範例示範在兩個 Transact-SQL 語句之後關閉非多任務緩衝連接。 如果此連線非多任務緩衝處理,您也可以看到與將連線傳回連線集區相關聯的保持運作封包,而不是緊接在伺服器最後一個回應之後的關閉封包。 我們建議在任何類型的 Web 或服務應用程式中共用連線,以允許重複使用連線。 線上共用可減少伺服器的連線數目,並將與新連線相關聯的成本和延遲降到最低。

Frame Offset    Source IP    Dest IP      Description
----- --------- ------------ ------------ ---------------------------------------------------------------------------
  364 9.1949581 10.10.10.104  10.10.10.22 TDS:SQLBatch, Version = 7.300000, SPID = 0, PacketID = 1, Flags=...AP..., S
  365 9.1949581  10.10.10.22 10.10.10.104 TDS:Response, Version = 7.300000, SPID = 130, PacketID = 1, Flags=...AP...,
  366 9.3043331 10.10.10.104  10.10.10.22 TDS:SQLBatch, Version = 7.300000, SPID = 0, PacketID = 1, Flags=...AP..., S
  367 9.3072631  10.10.10.22 10.10.10.104 TDS:Response, Version = 7.300000, SPID = 130, PacketID = 1, Flags=...AP...,
  375 9.4078491 10.10.10.104  10.10.10.22 TCP:Flags=...A...F, SrcPort=4647, DstPort=1433, PayloadLen=0, Seq=157672648
  376 9.4078491  10.10.10.22 10.10.10.104 TCP:Flags=...A...., SrcPort=1433, DstPort=4647, PayloadLen=0, Seq=192890973
  379 9.4078491  10.10.10.22 10.10.10.104 TCP:Flags=...A...F, SrcPort=1433, DstPort=4647, PayloadLen=0, Seq=192890973
  397 9.5221071 10.10.10.104  10.10.10.22 TCP:Flags=...A...., SrcPort=4647, DstPort=1433, PayloadLen=0, Seq=157672649

正在關閉的閑置或集區連線

在先前的保持交換之後 10 秒關閉連線(請參閱 Delta 數據行)。

注意

剖析器錯誤地將初始 ACK+FIN 封包 (Frame 1881) 標示為keep-alive ACK 封包,因為先前的keep-alive 封包。 不過,它會初始化連接關閉。

Frame Offset     Delta      Source IP   Dest IP     Description
----- ---------- ---------- ----------- ----------- -----------------------------------------------------------------
 1314 16.3641802  0.0000000 10.10.10.45 10.10.10.51 TCP:[Keep alive]Flags=...A...., SrcPort=51708, DstPort=1433, Payl
 1317 16.3677083  0.0035281 10.10.10.51 10.10.10.45 TCP:[Keep alive ack]Flags=...A...., SrcPort=1433, DstPort=51708, 
 1327 16.4269375  0.0592292 10.10.10.51 10.10.10.45 TCP:[Keep alive]Flags=...A...., SrcPort=1433, DstPort=51708, Payl
 1328 16.4269637  0.0000262 10.10.10.45 10.10.10.51 TCP:[Keep alive ack]Flags=...A...., SrcPort=51708, DstPort=1433, 
 1881 26.7918499 10.3648862 10.10.10.45 10.10.10.51 TCP:[Keep alive ack]Flags=...A...F, SrcPort=51708, DstPort=1433, 
 1886 26.7929474  0.0010975 10.10.10.51 10.10.10.45 TCP:Flags=...A...., SrcPort=1433, DstPort=51708, PayloadLen=0, Se
 1888 26.7929474  0.0000000 10.10.10.51 10.10.10.45 TCP:Flags=...A...F, SrcPort=1433, DstPort=51708, PayloadLen=0, Se
 1890 26.7929947  0.0000473 10.10.10.45 10.10.10.51 TCP:Flags=...A...., SrcPort=51708, DstPort=1433, PayloadLen=0, Se