데이터베이스에서 DBCC CHECKDB 문을 실행할 때 오류 메시지가 SQL Server 매우 큰 테이블을 하나 이상 들어: "래치를 기다리는 동안 시간 초과가 발생 했습니다"

적용 대상: Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Workgroup Edition

# 버그: 406938 (SQLBUDT)

증상


다음 시나리오를 고려하십시오. 매우 큰 테이블을 하나 이상 포함 된 데이터베이스를 해야 합니다. 테이블은 일반적으로 몇 백 기가바이트 (GB) 크기. Microsoft SQL Server 2005 이상 버전에서 데이터베이스에 대해 DBCC checkdb를 실행합니다. 이 시나리오에서는 다음과 유사한 오류 메시지가 SQL Server 오류 로그에 기록 됩니다.
2005-12-06 02:04:09.41 spid65 래치를 기다리는 동안 시간 초과가 발생 했습니다: 클래스 id 000000002201DED0 ' DBCC_MULTIOBJECT_SCANNER' 입력 4, 0x000000000C80BEB8 작업: 6, 300, waittime 0xa 소유 0x0000000005A0AC58 작업에 플래그. 계속 기다립니다.
그러나 DBCC CHECKDB 문이 성공적으로 완료 됩니다. 오류 메시지는 무시 해도 됩니다.

원인


이 문제는 SQL Server 인덱스 할당 맵 (IAM) 체인을 통과 하는 경우 시간 제한이 발생 하기 때문에 발생 합니다. 오류 메시지에서 언급 한 래치 다른 스레드가 목록에 액세스 하지 못하도록 방지 하는 데 사용 됩니다. 이 목록은 지정된 된 테이블에 연관 된 모든 인덱스에 대 한 IAM 체인을 통과 하는 스레드에 의해 구축 중입니다. 테이블이 큰 경우 5 분 이상 걸립니다 충분 한 있는 이러한 IAM 체인을 통과, 래치 시간 제한이 발생할 수 있습니다. 또한이 문제는 일반적으로 더 나쁜 디스크 I/O 속도가 느린 경우입니다.

상태


이 동작은 의도된 것입니다.