Sql-Server

是否可以跟踪我在表上刪除主鍵聚集索引的進度?

  • March 4, 2020

我有一個需要刪除的大型主鍵聚集索引。我相信刪除它也會觸發非聚集索引(也很大)上的索引重建。有沒有辦法確定這些過程的進度?

如果您使用的是企業版或同等版本,則可以刪除主鍵ONLINE

ALTER TABLE Production.TransactionHistory
DROP CONSTRAINT PK_TransactionHistory_TransactionID
WITH (ONLINE = ON);

這將允許您使用 Profiler 事件類進度報告監控進度:線上索引操作或擴展事件:

progress_report_online_index_operation

在聯機索引建構過程中發生,以指示建構操作的進度。線上索引建構操作的每個階段都會生成一個事件。使用此事件來監控線上索引建構。

它提供以下事件欄位:

progress_report_online_index_operation 事件欄位

從 SQL Server 2014 開始,您可以使用查詢配置文件來跟踪CREATE INDEX語句的進度。您還可以使用它來獲取有關 DROP INDEX 過程的一些進度資訊。

具體來說,以下查詢將顯示當您刪除聚集索引時對非聚集索引的更新進度,因為必須掃描 HEAP,以便在聚集索引之後可以更新非聚集索引中的 RID 指針掉了。

SELECT node_id,
   physical_operator_name,
   SUM(row_count) row_count, 
   SUM(estimate_row_count) AS estimate_row_count,
   CAST(SUM(row_count)*100 AS float)/SUM(estimate_row_count)  as estimate_percent_complete
FROM sys.dm_exec_query_profiles   
WHERE session_id=62 --update to session id of session dropping the index
GROUP BY node_id,physical_operator_name
ORDER BY node_id desc;

請注意,如果您有多個非聚集索引,您將看到“estimate_percent_complete”列多次達到 100%。在刪除聚集索引時,該腳本最初也不會返回任何行,因為查詢配置文件不會為此過程返回任何資訊。

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