重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

标题: 在数据库上运行 DBCC CHECKDB 语句时出现“等待闩锁时出现超时”错误 [打印本页]

作者: 刘泽宇    时间: 2026-3-22 11:04
标题: 在数据库上运行 DBCC CHECKDB 语句时出现“等待闩锁时出现超时”错误
现象
假设出现了下面这种情景:

你有一个数据库,其中包含一个或多个非常大的表。
这些表的大小通常为几百 GB(GB)。
DBCC CHECKDB在 SQL Server 中的数据库上运行该语句。
在此方案中,类似于以下内容的错误消息将写入 SQL Server 错误日志:

<DateTime> spid65 在等待闩锁时发生超时:类“DBCC_MULTIOBJECT_SCANNER”,id 000000002201DED0,类型 4,任务0x000000000C80BEB8:6,waittime 300,标志0xa,拥有任务0x0000000005A0AC58。 将继续等待。

但是,该 DBCC CHECKDB 语句将成功完成。 可以安全地忽略错误消息。

原因
出现此问题的原因是当 SQL Server 遍历索引分配映射(IAM)链时发生超时。 错误消息中提到的闩锁用于阻止其他线程访问列表。 此列表是由遍历与给定表关联的所有索引的 IAM 链的线程生成的。 如果表足够大,遍历这些 IAM 链需要 5 分钟以上,则可能会遇到闩锁超时。此外,当磁盘 I/O 速度缓慢时,此问题通常更糟。

状态
此行为是特意这样设计的。






欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2