&引用;等待缓冲区闩锁类型2时发生超时”;SQL Server中出现错误

&引用;等待缓冲区闩锁类型2时发生超时”;SQL Server中出现错误,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,等待时发生超时 页的缓冲闩锁类型2 (1:1535865),数据库ID 6 这是我在尝试创建索引时收到的五次错误消息 CREATE NONCLUSTERED INDEX YearIndx ON dbo.Papers ( PublicationYear ) papers表大约有2000万条记录和175 GB的存储空间,我从来没有遇到过这种情况,在伟大的Google上搜索并没有立即击中我,所以我会尝试以下方法: 请确认您正在从SSMS查询窗口运行此查询。如果是,则转到查询、查询选项

等待时发生超时 页的缓冲闩锁类型2 (1:1535865),数据库ID 6

这是我在尝试创建索引时收到的五次错误消息

CREATE NONCLUSTERED  INDEX YearIndx ON dbo.Papers
(   
    PublicationYear
)

papers表大约有2000万条记录和175 GB的存储空间,我从来没有遇到过这种情况,在伟大的Google上搜索并没有立即击中我,所以我会尝试以下方法:

请确认您正在从SSMS查询窗口运行此查询。如果是,则转到查询、查询选项、执行。执行超时值是多少

CREATE NONCLUSTERED  INDEX YearIndx ON dbo.Papers
(   
    PublicationYear
)
WITH 
(
SORT_IN_TEMPDB = ON
--, ONLINE=ON               --Enterprise only
, ALLOW_ROW_LOCKS =  OFF    --default is on
, ALLOW_PAGE_LOCKS =  OFF   --default is on
,  MAXDOP = 1               --all that you can allow
)
  • 哦,请确保您阅读了CREATEINDEX语句,以确保我选择的选项适用于您的情况。例如,如果tempdb与db_name(6)位于同一组磁盘上,那么情况可能只会变得更糟

  • 另一个选项是创建一个相同的空表,其中包含您想要的所有索引。然后,您可以通过从dbo.Papers中选择,轻轻地填充该表。完成后,使用一批事务包装,将dbo.Papers重命名为dbo.Papers\u old,将dbo.Papers\u new重命名为dbo.Papers

  • 最后,我想到了你的索引。您是否绝对确定,只要发布一年的索引就可以解决出现的任何问题?让我吃惊的是,大多数人可能并不是在寻找一年内写的所有东西。更有可能的是,约翰今年写的所有论文,或者上个月写的所有论文


如果您的问题涉及临时表而不是索引创建,并且错误消息中有“类型4”,则问题可能是

如果“SORT_IN_tempdb=ON”,索引创建实际上涉及tempdb,那么这些问题很可能是相关的

建议对您的SQL Server版本应用累积更新

等待缓冲区闩锁时发生超时--类型4,bp 00000000 FEAFB028,第12页:312752,stat 0xbc00e09,数据库id:2,分配单元id:724228131807060/351413755606409,任务0x00000000D2220838:0,等待时间20700,标志0x10000001A,拥有任务0x0000000D22302808。继续等待


听起来像是IO或内存问题。您是否在服务器上启用了AWE?非常感谢您的努力。我还试图通过搜索谷歌找到一些答案,但没有人能找到答案。此外,昨天我尝试了DBCC CHECKDB;然后运行createindex脚本,效果很好。但我知道这并不总是有效的。再次谢谢你。谢谢你的例子@p.campbell