“在SQL Server中等待缓冲区锁存器类型2”时出现“超时”

时间:2010-06-30 12:42:14

标签: sql sql-server sql-server-2008

  

等待时发生超时   缓冲锁存器类型2用于页面   (1:1535865),数据库ID 6。

这是我在尝试创建索引时获得了五次的错误消息

CREATE NONCLUSTERED  INDEX YearIndx ON dbo.Papers
(   
    PublicationYear
)

论文表约有20,000,000条记录和175 GB

2 个答案:

答案 0 :(得分:4)

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

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

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

  

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

答案 1 :(得分:3)

我从来没有遇到这种情况,对伟大的谷歌的搜索没有立即打击我,所以这是我会尝试的:

请确认您是否正在从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
)
  • 哦,并确保您阅读了创建索引语句,以确保我选择的选项适用于您的情况。例如,如果tempdb与db_name(6)位于同一组磁盘上,那么情况可能只会变得更糟

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

  • 最后,我在想你的索引。你是否绝对肯定只有PublicationYear的索引才能解决出现的问题?让我感到震惊的是,大多数人可能并不是在寻找一年内所写的所有内容。更有可能的是,约翰在今年撰写的所有论文,或上个月撰写的所有论文。