증상
Microsoft SQL Server 2012 또는 Microsoft SQL Server 2014에서 병합 복제를 사용 한다고 가정 합니다. 동기화 프로세스의 일부로 병합 에이전트는 세션에서 새 생성을 수행 합니다. 교착 상태 또는 시간 초과와 같은 몇 가지 이유로 트랜잭션이 교착 상태로 선택 되 고, 트랜잭션이 롤백 되었고, 앞으로 생성 되는 배포에서 MSinternal_makegeneration_inprog 응용 프로그램 잠금에 대 한 대규모 차단 체인이 있을 수 있으며 이전에 언급 한 세션은 head 블 로커로 표시 됩니다.
원인
세대 만들기 프로세스의 보안을 유지 하는 데 사용 되는 응용 프로그램 잠금은 세션 수준 응용 프로그램 잠금입니다. 생성을 처리 하는 동안 교착 상태가 감지 되 면 트랜잭션만 롤백되고 세션은 로그 오프 되지 않습니다. 세션 수준 응용 프로그램 잠금을 해제 하려면 세션을 로그 오프 해야 합니다. 따라서 다시 시도 논리의 디자인 (즉, 병합 복제에서 생성을 수행 하는 동안 세션이 로그 오프 되지 않음) 때문에 첫 번째 생성이 교착 상태와 함께 실패 하는 경우에는 트랜잭션 롤백 중에는 세션 잠금 (MSinternal_makegeneration_inprog) 이 해제 되지 않습니다. 이렇게 하면 앞으로 생성 하는 프로세스에서 잠금 요청에 대 한 차단 체인이 발생 하 게 됩니다. 헤드 차단은 교착 상태에 실패 하는 첫 번째 세대의 생성 요청으로 표시 됩니다. 핫픽스 이전에는 SQL Server가 생성을 성공적으로 수행 하기 위해 잠금을 해제 합니다. 교착 상태가 발생 하는 경우 세션을 로그 오프 하기 전에 고아 세션 응용 프로그램 잠금을 해제 합니다.
해결 방법
이 문제는 다음 SQL Server 누적 업데이트에서 처음 수정 되었습니다.
SQL Server 2014 누적 업데이트 5 /en-us/help/3011055
SQL Server 2012 SP2에 대 한 누적 업데이트 3 /en-us/help/3002049
각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.