Condividi tramite


Tracciare la sequenza di chiusura della connessione di rete nel motore di database

Questo articolo presenta esempi di traccia di rete che acquisisce la sequenza durante la chiusura di una connessione TCP (Transmission Control Protocol) tra un'applicazione client e sql Server motore di database (il server). Comprendere questi modelli è fondamentale per diagnosticare il comportamento della rete, identificare le strategie di pool e ottimizzare la gestione delle connessioni nelle applicazioni Web o di servizio.

Chiusura dei tipi di connessione

Questo articolo fornisce esempi per le normali connessioni TCP e le connessioni MARS (Multiple Active Result Sets). MARS è una funzionalità di SQL Server, introdotta con SQL Server 2005 (9.x), che consente l'esecuzione di più comandi in una connessione senza dover pulire i risultati dal primo comando, prima di eseguire il secondo comando. MARS viene ottenuto tramite multiplexing di sessione (SMUX).

In questa sezione vengono descritti diversi esempi di chiusura di una connessione di rete.

  • L'indirizzo IP del client è 10.10.10.104
  • L'indirizzo IP del server è 10.10.10.22

Chiusura di pacchetti

Questo esempio mostra una normale sequenza di chiusura della connessione. Prendere nota dei numeri di fotogrammi bassi e degli offset di tempo. Questa sequenza è probabilmente una chiusura della connessione in pool. Questo problema dovrebbe verificarsi entro 30 secondi dall'inizio della traccia oppure potrebbero essere visualizzati anche pacchetti keep-alive.

Diagramma della chiusura della sessione TCP a quattro vie.

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

Istruzioni Transact-SQL e pacchetti di chiusura

In questo esempio viene illustrata la chiusura di una connessione non con pool, dopo due istruzioni Transact-SQL. Se questa connessione non è stata inserita in pool, è anche possibile visualizzare pacchetti keep-alive associati all'invio della connessione al pool di connessioni, anziché i pacchetti di chiusura immediatamente dopo l'ultima risposta dal server. È consigliabile raggruppare le connessioni in qualsiasi tipo di applicazione Web o di servizio per consentire il riutilizzo della connessione. Il pool di connessioni riduce il numero di connessioni al server e riduce al minimo i costi e il ritardo associati alle nuove connessioni.

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

Connessione inattiva o in pool chiusa

La connessione viene chiusa 10 secondi dopo lo scambio keep-alive precedente (vedere Delta la colonna).

Nota

Il parser contrassegna erroneamente il pacchetto iniziale ACK+FIN (Frame 1881) come pacchetto keep-alive ACK , perché il pacchetto keep-alive precedente. Tuttavia, sta inizializzando la chiusura della connessione.

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