この記事では、クライアント アプリケーションと 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 秒以内に発生する必要があります。また、キープアライブ パケットが表示される場合もあります。
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