데이터베이스 엔진 네트워크 연결 닫기 시퀀스 추적
이 문서에서는 클라이언트 애플리케이션과 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초 이내에 발생하거나 연결 유지 패킷이 표시될 수도 있습니다.
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