다음을 통해 공유


데이터베이스 엔진 네트워크 연결 닫기 시퀀스 추적

이 문서에서는 클라이언트 애플리케이션과 SQL Server 데이터베이스 엔진(서버) 간의 TCP(Transmission Control Protocol) 연결이 닫혀 있는 동안 시퀀스를 캡처하는 네트워크 추적의 예를 제공합니다. 이러한 패턴을 이해하는 것은 네트워크 동작을 진단하고, 풀링 전략을 식별하고, 웹 또는 서비스 애플리케이션에서 연결 관리를 최적화하는 데 중요합니다.

연결 형식 닫기

이 문서에서는 일반 TCP 연결 및 MARS(다중 활성 결과 집합) 연결에 대한 예제를 제공합니다. MARS는 SQL Server 2005(9.x)에서 도입된 SQL Server의 기능으로, 두 번째 명령을 실행하기 전에 첫 번째 명령의 결과를 정리하지 않고도 연결에서 여러 명령을 실행할 수 있습니다. MARS는 SMUX(세션 멀티플렉싱)를 통해 달성됩니다.

이 섹션에서는 네트워크 연결을 닫는 몇 가지 예를 설명합니다.

  • 클라이언트 IP 주소는 10.10.10.104
  • 서버 IP 주소는 10.10.10.22

패킷 닫기

이 예제에서는 일반 연결 닫기 시퀀스를 보여줍니다. 낮은 프레임 번호와 시간 오프셋을 확인합니다. 이 시퀀스는 풀링된 연결 닫기일 가능성이 높습니다. 추적이 시작된 후 30초 이내에 발생하거나 연결 유지 패킷이 표시될 수도 있습니다.

4방향 TCP 세션 닫기의 다이어그램

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 문 및 닫는 패킷

이 예제에서는 두 Transact-SQL 문 뒤의 풀이 없는 연결을 닫는 방법을 보여 줍니다. 이 연결이 풀되지 않은 경우 서버의 마지막 응답 바로 다음에 닫는 패킷 대신 연결을 다시 연결 풀로 보내는 것과 관련된 연결 유지 패킷도 볼 수 있습니다. 연결을 다시 사용할 수 있도록 모든 종류의 웹 또는 서비스 애플리케이션에서 연결을 풀링하는 것이 좋습니다. 연결 풀링을 사용하면 서버에 대한 연결 수가 줄어들고 새 연결과의 연결 비용과 지연이 최소화됩니다.

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

유휴 또는 풀된 연결이 닫히고 있습니다.

연결은 이전 연결 유지 교환 후 10초 후에 닫힙니다(열 참조 Delta ).

참고 항목

파서는 이전의 keep-alive ACK 패킷 때문에 초기 ACK+FIN 패킷(프레임 1881)을 연결 유지 패킷으로 잘못 표시합니다. 그러나 연결 닫기를 초기화하고 있습니다.

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