TCP Provider: The semaphore timeout period has expired
- SQL Server 2012
- Windows Server 2012R2 (Amazon VM)
[문제 발생]
- 링크드 서버를 사용하여 데이터를 가져오는 시스템에서 비정기적으로 다음과 같은 에러가 발생
Message Executed as user: NT SERVICE\SQLSERVERAGENT. TCP Provider: The semaphore timeout period has expired. [SQLSTATE 07008] (Error 121). The step failed. |
[원인]
- 네트워크 속성의 TCP Chimney offload 설정이 Enabled로 설정되어 대용량의 데이터를 전송할 때 네트워크의 부하로 문제가 발생한 것으로 추정
[해결 방법]
- OS 및 네트워크의 TCP Chimney offload 기능을 Disable 설정.
[적용 후 결과]
- 대용량 데이터 전송 시작 후 몇 초 이내 발생하던 에러가 TB단위의 데이터 이동시에도 문제 없이 작동 함.
[TCP Chimney offload]
TCP Chimney 오프로드는 네트워크를 통한 데이터 이동 관련 작업을 호스트 컴퓨터의 CPU에서 네트워크 어댑터로 오프로드할 수 있게 해주는 네트워킹 기술이다. 이 기능을 활성화하면, TCP/IP 패킷 처리의 일부를 OS가 아닌 network adapter에서 담당하여 CPU 사용률을 낮춰 준다. 물론 Network Adapter와 OS에서 모두 이 기능을 지원해야만 사용 가능하다. 이 기술을 사용하면 관리 효율성이나 보안에 손실을 주거나 추가 프로그램 사용하지 않고도 컴퓨터 또는 서버의 네트워크 데이터 처리 작업을 향상시킬 수 있다. 현재 네트워크 처리 오버헤드로 제한을 받는 프로그램도 TCP Chimney 오프로드와 함께 사용할 경우 일반적으로 더 잘 조정된다.
Windows Server 2003에서는 Scalable Networking Pack(SNP)을 통해서 이 기능이 배포되었고, Windows 서비스팩 2에도 포함되어 있다. Windows Server 2008부터는 기본 값으로 Disable 되어 있다.
[TCP Chimney offload 확인]
Chimney offload를 포함한 TCP global Parameters 전체에 대한 설정 확인은 콘솔창에서 다음 스크립트를 입력 한다.
Netsh int tcp show global |
[TCP 연결이 OS에서 처리되는지 offload 되어 NiC에서 처리 되는지 확인]
어떤 TCP 연결이 OS에서 오프로드 되어 NIC에서 처리되는지 확인 하기 위해서는 콘솔창에서 다음 명령어를 실행 한다. Offload 된 연결인 경우 'offload'라고 표시되며 그렇지 않은 경우 'InHost'라고 표시 된다.
Netstat -t |
[참고 자료]
2014-04-24 / 강성욱 / http://sqlmvp.kr
'SQL Server > SQL Server Tip' 카테고리의 다른 글
SQL Server 쿼리 처리 아키텍처_실행 계획 캐싱 및 다시 사용 – 강제 매개 변수화 (0) | 2015.07.22 |
---|---|
Event log 기록 실패로 인한 SQL Agent Service 시작 실패 (0) | 2015.07.21 |
SQL Server 연결 실패 (0) | 2015.07.21 |
CRL 사용 환경의 메모리 누수 (0) | 2015.07.21 |
Windows8 에서 TFS 2012 Express 오류 (0) | 2015.07.21 |