Komunikat o błędzie podczas korzystania z instrukcja DBCC CHECKDB na bazie danych, na którym zawiera jeden lub więcej bardzo dużych tabel w programie SQL Server: "Upłynął limit czasu podczas oczekiwania na zatrzaśnięcie"

Dotyczy: Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Workgroup Edition

Nr błędu: 406938 (SQLBUDT)

Objawy


Rozważmy następujący scenariusz. Masz bazy danych, która zawiera jeden lub więcej bardzo dużych tabel. Tabele są zazwyczaj kilkuset rozmiar gigabajtów (GB). Uruchom instrukcja DBCC CHECKDB w bazie danych programu Microsoft SQL Server 2005 i nowszych wersjach. W tym scenariuszu komunikat o błędzie podobny do następującego jest zapisywany dziennik błędów programu SQL Server:
Przekroczono limit czasu podczas oczekiwania na zatrzaśnięcie spid65 02:04:09.41 2005-12-06: klasy "DBCC_MULTIOBJECT_SCANNER", 000000002201DED0 identyfikator typu 4, zadanie 0x000000000C80BEB8: 6, czas_oczekiwania 300, flagi 0xa, będący właścicielem zadania 0x0000000005A0AC58. Nadal czekać.
Jednak instrukcja DBCC CHECKDB zostanie ukończona pomyślnie. Można bezpiecznie zignorować komunikat o błędzie.

Przyczyna


Ten problem występuje, ponieważ limit czasu występuje, gdy program SQL Server przechodzi łańcuchów Mapa alokacji indeksu (IAM). Zatrzask, który jest wymieniony w komunikacie o błędzie jest używana do innych wątków uniemożliwić dostęp do listy. Ta lista jest konstruowany przez wątek, który przechodzi łańcuchów IAM dla wszystkich indeksów, które są skojarzone z danej tabeli. Jeśli tabela jest duża, wystarczy, że przechodzenie przez te łańcuchy IAM trwa dłużej niż 5 minut, może wystąpić zatrzask limitu czasu. Ponadto ten problem jest zwykle gorsze, gdy we/wy dysku jest wolne.

Stan


To zachowanie jest zgodne z projektem.