Condividi tramite


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

Questo articolo presenta esempi di una traccia di rete che acquisisce la sequenza nel momento in cui viene chiusa una connessione TCP (Transmission Control Protocol) tra un'applicazione client e il Motore di Database di SQL Server (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 di una connessione in un pool. Questo dovrebbe avvenire entro 30 secondi dall'inizio della traccia, altrimenti 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 poolizzata in fase di chiusura

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

Nota

Il parser identifica erroneamente il pacchetto iniziale ACK+FIN (Frame 1881) come un pacchetto keep-alive ACK a causa del 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