データベース エンジンでネットワーク接続の終了シーケンスをトレースする
この記事では、クライアント アプリケーションと 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