Freigeben über


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.

Diagramm des Schließens der vierseitigen TCP-Sitzung.

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