データベース エンジンでネットワーク接続の終了シーケンスをトレースする

この記事では、クライアント アプリケーションと SQL Server データベース エンジン (サーバー) の間の伝送制御プロトコル (TCP) 接続が閉じられたときにシーケンスをキャプチャするネットワーク トレースの例を示します。 これらのパターンを理解することは、ネットワーク動作の診断、プール戦略の特定、Web またはサービス アプリケーションでの接続管理の最適化に不可欠です。

接続の種類を閉じる

この記事では、通常の TCP 接続と複数のアクティブな結果セット (MARS) 接続の例を示します。 MARS は、SQL Server 2005 (9.x) で導入された SQL Server の機能です。これにより、2 番目のコマンドを実行する前に、最初のコマンドの結果をクリーンアップしなくても、接続で複数のコマンドを実行できます。 MARS は、セッション 多重化 (SMUX) によって実現されます。

このセクションでは、ネットワーク接続を閉じるいくつかの例について説明します。

  • クライアント IP アドレスは次の値です。 10.10.10.104
  • サーバーの IP アドレスは次の値です。 10.10.10.22

パケットを閉じる

この例は、通常の接続終了シーケンスを示しています。 フレーム番号とタイム オフセットが小さいことに注意してください。 このシーケンスは、プールされた接続クロージャである可能性が最も高いです。 これは、トレースの開始から 30 秒以内に発生する必要があります。また、キープアライブ パケットが表示される場合もあります。

4 方向 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 ステートメントと終了パケット

この例では、2 つの 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

Note

パーサーは、前のキープアライブ パケットのため、最初 ACK+FIN のパケット (フレーム 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