SQL Server/SQL Server Tip

TCP Provider: The semaphore timeout period has expired

SungWookKang 2015. 7. 21. 08:54
반응형

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

반응형