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.
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