跟踪数据库引擎上的网络连接关闭序列

本文演示了在客户端应用程序与 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 秒内发生,也可能会看到保持活动数据包。

关闭四向 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)标记为保持连接 ACK 数据包,因为以前的保持连接数据包。 但是,它正在初始化连接关闭。

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