相关疑难解决方法(0)

为什么 CREATE INDEX ... WITH ONLINE=ON 会在几分钟内阻止对表的访问?

我有一个现有的表:

CREATE TABLE dbo.ProofDetails
(
    ProofDetailsID int NOT NULL 
        CONSTRAINT PK_ProofDetails 
        PRIMARY KEY CLUSTERED IDENTITY(1,1)
    , ProofID int NULL
    , IDShownToUser int NULL
    , UserViewedDetails bit NOT NULL 
        CONSTRAINT DF_ProofDetails_UserViewedDetails 
        DEFAULT ((0))
);
Run Code Online (Sandbox Code Playgroud)

该表有 150,000,000 行。系统 24x7x365 全天候运行,因此没有定期发生的维护窗口。

我想向表中添加索引,并且使用 SQL Server 的企业版,我应该能够在不阻止对表的写访问的情况下做到这一点。我使用的命令是:

CREATE INDEX IX_ProofDetails_ProofID_Etc 
ON dbo.ProofDetails (ProofID, IDShownToUser)
INCLUDE (UserViewedDetails)
WITH (ONLINE=ON
    , ALLOW_ROW_LOCKS=ON
    , ALLOW_PAGE_LOCKS=ON
    , FILLFACTOR=100
    , MAXDOP=4
);
Run Code Online (Sandbox Code Playgroud)

我在 SSMS 中通过按 自行执行了该语句F5。它运行了超过一分钟,然后开始阻塞其他会话。然后我立即取消了该CREATE INDEX命令,因为我无法阻止其他会话。

在第一分钟,没有任何东西阻止我的CREATE INDEX命令,sys.dm_exec_requests显示了等待类型CXPACKET- 当然。我认为这不是一件坏事,因为操作是并行化的。 …

index sql-server sql-server-2012

30
推荐指数
1
解决办法
6万
查看次数

标签 统计

index ×1

sql-server ×1

sql-server-2012 ×1