SQL Server 中的“等待缓冲区锁存器类型 2 时发生超时”错误

Mos*_*azi 5 sql sql-server sql-server-2008

等待页 (1:1535865)、数据库 ID 6 的缓冲区锁存器类型 2 时发生超时。

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

CREATE NONCLUSTERED  INDEX YearIndx ON dbo.Papers
(   
    PublicationYear
)
Run Code Online (Sandbox Code Playgroud)

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

Jef*_*ass 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
)
Run Code Online (Sandbox Code Playgroud)
  • 哦,请确保您阅读了创建索引语句,以确保我选择的选项适用于您的情况。例如,如果 tempdb 与 db_name(6) 位于同一组磁盘上,那么情况可能只会变得更糟

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

  • 最后,我在考虑你的索引。您是否绝对确定仅 PublicationYear 上的索引就能解决出现的任何问题?让我惊讶的是,大多数人可能不会搜索一年内写的所有内容。更有可能的是,约翰今年写的所有论文,或者上个月写的所有论文。