Message d’erreur lorsque vous exécutez l’instruction DBCC CHECKDB sur une base de données qui contient une ou plusieurs des tables volumineuses dans SQL Server : « Délai d’attente s’est produite en attendant le verrou »

S’applique à : Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Workgroup Edition

N° de bogue : 406938 (SQLBUDT)

Symptômes


Envisagez le scénario suivant. Vous avez une base de données qui contient une ou plusieurs tables de très grande taille. Les tables sont généralement plusieurs centaines taille gigaoctets (Go). Vous exécutez l’instruction DBCC CHECKDB sur la base de données dans Microsoft SQL Server 2005 et versions ultérieures. Dans ce scénario, un message d’erreur semblable au suivant est écrit dans le journal des erreurs SQL Server :
spid65 de 02:04:09.41 2005-06-12 dépassement de délai d’attente de verrou : classe 'DBCC_MULTIOBJECT_SCANNER', id 000000002201DED0, tapez 4, tâche 0x000000000C80BEB8 : 6, waittime 300, indicateurs 0xa, propriétaire de la tâche 0x0000000005A0AC58. Continuer à attendre.
Toutefois, l’instruction DBCC CHECKDB réussit. Vous pouvez ignorer le message d’erreur.

Cause


Ce problème est dû à un dépassement de délai se produit lorsque SQL Server traverse les chaînes de plan d’Allocation d’Index (IAM). Le verrou qui est mentionné dans le message d’erreur est utilisé pour empêcher d’autres threads d’accéder à une liste. Cette liste est générée par un thread qui traverse les chaînes IAM pour tous les index associés à une table donnée. Si la table est volumineuse suffisamment que traverser ces chaînes IAM prend plus de 5 minutes, vous pouvez rencontrer le délai d’attente du verrou. En outre, ce problème est généralement dégradation lorsque les e/s disque est lente.

État


Ce comportement est voulu par la conception.