Sql-Server

DBCC CHECKTABLE 需要 15 分鐘以上才能在空表上執行

  • June 13, 2019

我有一個數據庫,其中一些小型或空表上的 DBCC CHECKTABLE 需要超過 15 分鐘才能執行。當它完成時,沒有失敗或錯誤。伺服器上其他所有方面的性能都處於非常可接受的狀態。同時沒有其他東西在執行。

我還嘗試了 DBCC CLEANTABLE 並使用全掃描更新了統計資訊。

我正在使用 SQL Server 2016 企業版 (13.0.5201.2)

範例表:

CREATE TABLE [Schema1].[Table1](
   [col1] [int] NOT NULL,
   [col2] [nvarchar](100) NOT NULL,
   [col3] [xml] NOT NULL,
CONSTRAINT [PK_1] PRIMARY KEY CLUSTERED 
(
   [col1] ASC,
   [col2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

我最終打開了與 Microsoft 的事件,並確定 sys.sysrscols(只能通過 DAC 訪問)有超過 2 億行。在他們進行審查後,發現它作為 DBCC SQL Server 的一部分總是對系統表進行檢查,即使是 DBCC CHECKTABLE。從DBCC CHECKTABLE 手冊

始終對所有系統表索引執行完整性檢查。

我的理解是 sys.sysrscols 做了一些列跟踪,大尺寸的原因是我們有許多表(200+)有 2000+ 分區和 163 列。幾乎所有這些都是臨時工作表,應該被應用程序刪除但沒有。我清除了它們,並且該過程返回到一個不到 1 分鐘的空表的正常響應時間。

他們還指出,文件中列出了分區會影響 DBCC 檢查。從分區表和索引

DBCC 命令

隨著分區數量的增加,DBCC 命令的執行時間可能會隨著分區數量的增加而變長。

引用自:https://dba.stackexchange.com/questions/220173