Partilhar via


Rastrear a seqüência de fechamento da conexão de rede no Mecanismo de Banco de Dados

Este artigo apresenta exemplos de um rastreamento de rede que captura a seqüência durante o fechamento de uma conexão TCP entre um aplicativo cliente e o Mecanismo de Banco de Dados do SQL Server (o servidor). Entender esses padrões é crucial para diagnosticar o comportamento da rede, identificar estratégias de pool e otimizar o gerenciamento de conexões em aplicativos da Web ou de serviço.

Fechando tipos de conexão

Este artigo fornece exemplos de conexões TCP normais e conexões MARS (Conjuntos de Resultados Múltiplos Ativos). O MARS é um recurso do SQL Server, introduzido com o SQL Server 2005 (9.x), que permite que vários comandos sejam executados em uma conexão sem a necessidade de limpar os resultados do primeiro comando, antes de executar o segundo comando. O MARS é obtido por meio de multiplexação de sessão (SMUX).

Esta seção descreve vários exemplos de fechamento de uma conexão de rede.

  • O endereço IP do cliente é 10.10.10.104
  • O endereço IP do servidor é 10.10.10.22

Fechando pacotes

Este exemplo mostra uma sequência de fechamento de conexão normal. Observe os números baixos de quadros e deslocamentos de tempo. Essa sequência é provavelmente um fechamento de conexão em pool. Isso deve ocorrer dentro de 30 segundos após o início do rastreamento, ou você também poderá ver pacotes keep-alive.

Diagrama do fechamento da sessão TCP de quatro vias.

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

Instruções Transact-SQL e pacotes de fechamento

Este exemplo mostra o fechamento de uma conexão não poolada, após duas instruções Transact-SQL. Se essa conexão não fosse em pool, você também poderia ver pacotes keep-alive associados ao envio da conexão de volta para o pool de conexões, em vez dos pacotes de fechamento imediatamente após a última resposta do servidor. Recomendamos agrupar conexões em qualquer tipo de aplicativo Web ou de serviço para permitir a reutilização da conexão. O pool de conexões reduz o número de conexões com o servidor e minimiza o custo e o atraso associados a novas conexões.

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

Conexão ociosa ou em pool sendo fechada

A conexão é fechada 10 segundos após a troca de keep-alive anterior (consulte Delta a coluna).

Observação

O analisador marca erroneamente o pacote inicial ACK+FIN (Quadro 1881) como um pacote keep-alive ACK , porque o pacote keep-alive anterior. No entanto, ele está inicializando o fechamento da conexão.

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