設定平行索引作業

在執行 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