平行索引作業
為建立或重建索引,或卸除叢集索引的索引作業所內建的查詢計畫,允許在多個微處理器的電腦上進行平行、多執行緒作業。
[!附註]
只有 SQL Server 2008 Enterprise 才支援平行索引作業。
SQL Server 使用與其他查詢相同的演算法來判斷索引作業的平行處理原則程度 (要執行的個別執行緒總數)。索引作業的平行處理原則最大程度受限於 max degree of parallelism 伺服器組態選項。您可以在 CREATE INDEX、ALTER INDEX、DROP INDEX 和 ALTER TABLE 陳述式中設定 MAXDOP 索引選項,來覆寫個別索引作業的 max degree of parallelism 值。
Database Engine 建立索引執行計畫時,會將平行作業的數目設定為下列項目中的最低值:
微處理器的數目或電腦中的 CPU 數。
max degree of parallelism 伺服器組態選項中所指定的數目。
未超過 SQL Server 執行緒所執行之工作臨界值的 CPU 數目。
例如,電腦上有 8 個 CPU,但 max degree of parallelism 是設定為 6,那麼索引作業不會產生超過六個的平行執行緒。如果在建立索引執行計畫時,電腦中有五個 CPU 已經超過 SQL Server 工作的臨界值,則執行計畫只會指定三個平行執行緒。
平行索引作業的主要階段包含下列項目:
協定執行緒會快速及隨意掃描資料表,以估計索引鍵的散佈。協調執行緒會建立索引鍵值界限,此界限將建立數個等於平行作業程度的索引鍵值範圍,預期其中的索引鍵值範圍將包含類似數目的資料列。例如,如果資料表中有四百萬個資料列,而平行處理原則的程度為 4,則協調執行緒會決定將索引鍵值分成四組資料列,且每個資料列都會有一百萬個資料列。如果無法建立足夠數目的索引鍵範圍以使用所有 CPU,則平行處理原則的程度也會跟著降低。
協調執行緒會分派與平行作業程度相等數目的執行緒,並且等待這些執行緒完成它們的工作。每個執行緒會使用篩選來掃描基底資料表,並擷取其索引鍵值在執行緒指定範圍中的資料列。每個執行緒會在其索引鍵值範圍中,建立資料列的索引結構。在資料分割索引的例子中,每個執行緒都會建立指定數目的資料分割。執行緒之間不會共用資料分割。如需有關如何建立索引的詳細資訊,請參閱<建立 tempdb 與索引>。
當所有平行執行緒完成後,協調執行緒便會將索引次單元連接到單一索引中。此階段僅適用於離線索引作業。
個別的 CREATE TABLE 或 ALTER TABLE 陳述式可以有多個條件約束,要求建立索引。這幾個索引建立作業會以序列方式來執行,即使在有多個 CPU 的電腦上,每個個別索引建立作業可能是平行作業。