Verfolgen der Close-Sequenz der Netzwerkverbindung auf dem Datenbank-Engine
Dieser Artikel enthält Beispiele für eine Netzwerkablaufverfolgung, die die Sequenz erfasst, wenn eine TCP-Verbindung (Transmission Control Protocol) zwischen einer Clientanwendung und dem SQL Server-Datenbank-Engine (dem Server) geschlossen wird. Das Verständnis dieser Muster ist entscheidend für die Diagnose des Netzwerkverhaltens, das Identifizieren von Poolstrategien und die Optimierung der Verbindungsverwaltung in Web- oder Dienstanwendungen.
Schließen von Verbindungstypen
Dieser Artikel enthält Beispiele für normale TCP-Verbindungen und mehrere aktive Resultsets (MARS)-Verbindungen. MARS ist ein Feature von SQL Server, das mit SQL Server 2005 (9.x) eingeführt wurde, mit dem mehrere Befehle auf einer Verbindung ausgeführt werden können, ohne die Ergebnisse des ersten Befehls bereinigen zu müssen, bevor der zweite Befehl ausgeführt wird. MARS wird durch Session Multiplexing (SMUX) erreicht.
In diesem Abschnitt werden mehrere Beispiele zum Schließen einer Netzwerkverbindung beschrieben.
- Die Client-IP-Adresse ist
10.10.10.104
- Die Server-IP-Adresse ist
10.10.10.22
Schließen von Paketen
Dieses Beispiel zeigt eine normale Verbindungsschließsequenz. Beachten Sie die niedrigen Framezahlen und Zeitversätze. Diese Sequenz ist höchstwahrscheinlich eine poolierte Verbindungsschließung. Dies sollte innerhalb von 30 Sekunden nach dem Beginn der Ablaufverfolgung auftreten, oder Sie können auch Keep-Alive-Pakete sehen.
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-Anweisungen und schließende Pakete
In diesem Beispiel wird gezeigt, dass nach zwei Transact-SQL-Anweisungen eine Nichtpoolverbindung geschlossen wird. Wenn diese Verbindung nicht gepoolt wurde, könnten Sie auch Keep-Alive-Pakete sehen, die dem Senden der Verbindung wieder an den Verbindungspool zugeordnet sind, anstatt die schließenden Pakete unmittelbar nach der letzten Antwort vom Server. Es wird empfohlen, Verbindungen in einer beliebigen Art von Web- oder Dienstanwendung zu poolen, um die Wiederverwendung von Verbindungen zu ermöglichen. Die Verbindungspooling reduziert die Anzahl der Verbindungen mit dem Server und minimiert die Kosten und Verzögerung, die neuen Verbindungen zugeordnet werden.
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
Leerlauf- oder Poolverbindung wird geschlossen
Die Verbindung wird 10 Sekunden nach dem vorherigen Keep-Alive-Austausch geschlossen (siehe Delta
Spalte).
Hinweis
Der Parser markiert das anfängliche ACK+FIN
Paket (Frame 1881) versehentlich als Keep-Alive-Paket, da das vorherige Keep-Alive-Paket ACK
. Die Verbindung wird jedoch initialisiert.
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