Applies ToSQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2

증상

다음과 같은 경우를 생각해 볼 수 있습니다.

  • Microsoft SQL Server 2008 R2에 ALLOW_SNAPSHOT_ISOLATION 옵션이 있고 READ_COMMITTED_SNAPSHOT 활성화 되어 있는 데이터베이스가 있습니다.

  • 데이터베이스의 테이블에 대해 TABLOCK 및 UPDLOCK 힌트를 포함 하는 SELECT 문을 실행 합니다.

  • SELECT 문은 명시적 시작 TRAN에 래핑되어 있지만 COMMIT TRAN 은 실행 되지 않습니다.

  • 동일한 쿼리 힌트를 사용 하 여 시작 되는 두 개 이상의 쿼리는 명시적 트랜잭션에 있습니다.

이 시나리오에서 첫 번째 쿼리가 커밋되면 다른 쿼리 중 하나가 교착 상태가 됩니다.

원인

이 문제는 SQL Server가 다음 시나리오 중 하나에서 교착 상태를 잘못 보고 하기 때문에 발생 합니다.

  • 데이터베이스에 대해 ALLOW_SNAPSHOT_ISOLATION 및 READ_COMMITTED_SNAPSHOT 을 사용 하는 경우 동일한 트랜잭션에 대해 여러 쿼리가 완료 되 면 교착 상태가 잘못 된 것으로 보고 될 수 있습니다.

  • ALLOW_SNAPSHOT_ISOTION 를 사용 하 고 힌트 TABLOCK 및 UPDLOCK 를 사용 하는 경우 second 및 세째 SELECT 문은 X로 변환할 목적으로 IX 잠금을 사용 합니다. X로 변환 하려고 하면 IX 잠금이 교착 상태를 종료 합니다.

  • ALLOW_SNAPSHOT_ISOLATION 을 사용 하지 않도록 설정한 경우 두 번째 및 세 번째 쿼리는 6 개의 잠금을 가져옵니다. 이 상황에서 6 개의 잠금이 X로 변환 되 면 교착 상태에 해당 되지 않고 블로킹 시나리오 일 수 있습니다.

각각의 새로운 새 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 모든 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.