設定平行索引作業
在執行 SQL Server Enterprise 的多處理器電腦上,索引陳述式可能會如同其他查詢般,使用多個處理器來執行與索引陳述式相關聯的掃描、排序和索引作業。執行單一索引陳述式所用的處理器數目,取決於 max degree of parallelism 組態選項、目前的工作負載以及索引統計資料。max degree of parallelism 選項會決定用於執行平行計畫的最大處理器數目。如果 SQL Server Database Engine 偵測到系統忙碌中,在陳述式執行開始之前,會先自動降低索引作業之平行處理原則的程度。如果非資料分割索引的前端索引鍵資料行具有有限的相異值數目,或者每個相異值的頻率具有大幅差異,Database Engine 也可能會降低平行處理原則的程度。
[!附註]
只有 SQL Server Enterprise、Developer 和 Evaluation 版本才可使用平行索引作業。
查詢最佳化工具所使用的處理器數目通常可以提供最佳的效能。然而,諸如建立、重建、卸除非常大的索引都需要大量的資源,並可能在索引作業期間造成其他應用程式和資料庫作業的資源不足。當發生此問題時,您可以指定 MAXDOP 索引選項和限制索引作業要使用的處理器數目,藉以手動設定執行索引陳述式要使用的最大處理器數目。
MAXDOP 索引選項只會針對指定此選項的查詢來覆寫 max degree of parallelism 組態選項。下表列出可以使用 max degree of parallelism 組態選項及 MAXDOP 索引選項指定的有效整數值。
值 |
描述 |
---|---|
0 |
指定伺服器會根據目前的系統工作負載來決定所使用的 CPU 數目。這是預設值且為建議的設定。 |
1 |
隱藏平行計畫的產生。作業必須循序執行。 |
2-64 |
將處理器的數目限制成指定的值。視目前的工作負載而定來使用較少的處理器。如果指定的值大於可用的 CPU 個數,就會使用實際可用的 CPU 個數。 |
平行索引執行與 MAXDOP 索引選項適用於下列 Transact-SQL 陳述式:
CREATE INDEX
ALTER INDEX REBUILD
DROP INDEX (僅適用於叢集索引。)
ALTER TABLE ADD (索引) CONSTRAINT
ALTER TABLE DROP (叢集索引) CONSTRAINT
在使用 MAXDOP 索引選項時,所有使用 max degree of parallelism 組態選項的語意規則皆適用。如需詳細資訊,請參閱<max degree of parallelism 選項>。
當您執行加上或不加上 LOB_COMPACTION 的 ALTER INDEX REORGANIZE 時,max degree of parallelism 值是單一執行緒作業。在 ALTER INDEX REORGANIZE 陳述式中無法指定 MAXDOP 索引選項。
線上索引作業
線上索引作業允許索引作業期間進行使用者並行活動。您可以使用 MAXDOP 選項來控制線上索引作業專用的最大處理器數目。以此方式,您就可以平衡索引作業所使用的資源以及使用者並行所使用的資源。如需詳細資訊,請參閱<線上執行索引作業>。
資料分割索引作業
如果查詢最佳化工具將平行處理原則的程度套用至建立作業,則需要排序的資料分割索引作業可能需要更多的記憶體。平行處理原則的程度愈高,所需的記憶體就愈大。如需詳細資訊,請參閱<資料分割索引的特殊指導方針>。
範例
下列範例會在 ProductVendor 資料表上建立 IX_ProductVendor_VendorID 索引並將 max degree of parallelism 選項設為 8。假設伺服器有八個或更多的處理器,Database Engine 會限制索引作業的執行為八個或更少的處理器。
USE AdventureWorks2008R2;
GO
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IX_ProductVendor_VendorID')
DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor (BusinessEntityID)
WITH (MAXDOP=8);
GO