Messaggio di errore quando si esegue l'istruzione DBCC CHECKDB su un database contenente una o più tabelle di dimensioni molto grandi in SQL Server: timeout durante l'attesa del latch

In questo articolo viene introdotto un problema in cui viene visualizzato un messaggio di errore quando si tenta di eseguire l' DBCC CHECKDB istruzione in un database contenente una tabella di grandi dimensioni in SQL Server.

Versione originale del prodotto:   SQL Server 2012, SQL Server 2008
Numero KB originale:   919155

Sintomi

Considerare lo scenario descritto di seguito:

  • Si dispone di un database contenente una o più tabelle di dimensioni molto grandi.
  • Le tabelle sono in genere diverse centinaia di gigabyte (GB) di dimensioni.
  • È possibile eseguire l'istruzione DBCC CHECKDB nel database in SQL Server.

In questo scenario, un messaggio di errore simile al seguente viene scritto nel registro degli errori di SQL Server:

<DateTime> il timeout di spid65 si è verificato durante l'attesa del latch: Class ' DBCC_MULTIOBJECT_SCANNER ', ID 000000002201DED0, Type 4, Task 0x000000000C80BEB8:6, waittime 300, Flags 0xA, proprietaria di attività 0x0000000005A0AC58. Continuando ad attendere.

Tuttavia, l' DBCC CHECKDB istruzione verrà completata correttamente. È possibile ignorare il messaggio di errore in modo sicuro.

Causa

Questo problema si verifica perché si verifica un timeout quando SQL Server attraversa le catene di mappe IAM (Index Allocation Map). Il latch menzionato nel messaggio di errore viene utilizzato per impedire ad altri thread di accedere a un elenco. Questo elenco viene compilato da un thread che attraversa le catene IAM per tutti gli indici associati a una determinata tabella. Se la tabella è abbastanza grande che attraversare queste catene IAM richiede più di 5 minuti, è possibile che si verifichi il timeout del latch. Inoltre, questo problema in genere peggiora quando I/O del disco è lento.

Stato

Si tratta di un comportamento legato alla progettazione del prodotto.

Si applica a

  • Sviluppatore SQL Server 2008
  • SQL Server 2008 Enterprise
  • SQL Server 2008 Express
  • SQL Server 2008 Express con servizi avanzati
  • Datacenter di SQL Server 2008 R2
  • Sviluppatore di SQL Server 2008 R2
  • SQL Server 2008 R2 Enterprise
  • SQL Server 2008 R2 Express
  • SQL Server 2008 R2 Express con servizi avanzati
  • SQL Server 2008 R2 Standard
  • SQL Server 2008 R2 Standard Edition per le piccole imprese
  • SQL Server 2008 R2 Web
  • Gruppo di lavoro SQL Server 2008 R2
  • SQL Server 2008 Standard
  • SQL Server 2008 Web
  • SQL Server 2008 Workgroup
  • SQL Server 2012 Business Intelligence
  • Sviluppatore SQL Server 2012
  • SQL Server 2012 Enterprise
  • SQL Server 2012 Express
  • SQL Server 2012 standard
  • SQL Server 2012 Web
  • SQL Server 2012 Enterprise Core