平行程度

SQL Server 2005 會針對平行查詢執行或索引資料定義語言 (DDL) 作業的每一個執行個體,自動偵測最佳程度的平行處理原則。其作法是依據下列條件:

  1. SQL Server 是否正在具有多個微處理器或 CPU 的電腦上執行,例如對稱微處理電腦 (SMP)。
    具有一個以上 CPU 的電腦,才能使用平行查詢。
  2. 是否有足夠的執行緒可用。
    每一個查詢或索引作業都需要某個數目的執行緒來執行。執行平行計劃所需的執行緒會比執行序列計劃還多,而且所需的執行緒數目會隨著平行處理原則的程度增加。若針對平行處理原則之特定程度的平行計劃執行緒需求已無法滿足時,Database Engine 會自動降低平行處理原則的程度,或是完全放棄指定工作負載內容中的平行計劃。接著會執行序列計劃 (一個執行緒)。
  3. 已執行的查詢或索引作業類型。
    建立或重建索引,或是卸除叢集索引的索引作業,以及大量使用 CPU 循環的查詢,最適合使用平行計劃。例如,聯結大型資料表、大型彙總及排序大型結果集,皆適用於平行計劃。經常在交易處理應用程式中發現的簡單查詢,會尋找執行平行查詢時所需的其他協調作業,此平行查詢比潛在的效能提升更為重要。為區分能否從平行處理原則中獲益的查詢,Database Engine 會比較執行查詢或索引作業的預估成本與 cost threshold for parallelism 的值。雖然不建議這麼做,但使用者可以使用 sp_configure來變更預設值 5。
  4. 要處理的資料列數目是否足夠。
    如果查詢最佳化工具判定資料列數目太少,則它不會引進交換運算子來散發資料列。因此,運算子會循序執行。在序列計劃中執行運算子,可避免啟動、散發、協調成本超過執行平行運算子所獲得的利益時的案例。
  5. 目前是否有可用的散發統計資料。
    在舊版 SQL Server 中,如果可用的統計資料會讓 Database Engine 無法提供平行處理原則的最高程度,Database Engine 就會放棄平行計劃。而在 SQL Server 2005 中,如果無法使用平行處理原則的最高程度,則在放棄平行計劃前,會先考慮降低程度。
    例如,當您在檢視中建立叢集索引時,因為叢集索引尚未存在,所以無法評估散發統計資料。在此情況下,Database Engine 無法為索引作業提供平行處理原則的最高程度。然而,有些運算子 (如排序及掃描) 仍可從平行執行獲益。
ms188611.note(zh-tw,SQL.90).gif附註:
只有 SQL Server 2005 Enterprise Edition 才支援平行索引作業。

執行時,Database Engine 會判定先前描述的目前系統工作負載及組態資訊是否允許平行執行。如果保證可以平行執行,則 Database Engine 會判定最佳的執行緒數目,並將平行計劃的執行分散到那些執行緒上。當查詢或索引作業開始在多個執行緒上執行,以進行平行執行時,則在完成作業之前,都會使用相同數目的執行緒。每次從程序快取擷取執行計劃時,Database Engine 都會重新檢查最佳的執行緒決策數目。例如,執行查詢可能會使用到序列計劃,稍後執行同一個查詢會導致平行計劃使用三個執行緒,而第三次執行查詢的結果則是平行計劃使用四個執行緒。

在平行查詢執行計劃中,會循序執行插入、更新及刪除運算子。然而,UPDATE 或 DELETE 陳述式的 WHERE 子句,或 INSERT 陳述式的 SELECT 部份,可能會以平行方式執行。真正的資料變更隨即會循序套用到資料庫。

靜態和索引鍵集衍生的資料指標可以利用平行執行計劃來擴展。但是,動態資料指標的行為僅能由序列執行來提供。而最佳化工具所產生的查詢序列執行計劃,一定是動態資料指標的一部份。

覆寫平行處理原則的程度

您可以使用 max degree of parallelism 伺服器組態選項,限制要在平行計劃執行中使用的處理器數目。對於個別查詢及索引作業陳述式,可以指定 MAXDOP 查詢提示或 MAXDOP 索引選項,覆寫 max degree of parallelism 選項。MAXDOP 所提供的控制會比個別的查詢及索引作業還多。例如,您可以使用 MAXDOP 選項,利用增加或減少,來控制線上索引作業專用的處理器數目。如此一來,您就可以平衡索引作業所使用的資源及並行使用者的資源。

請參閱

概念

設定伺服器組態選項
max degree of parallelism 選項
平行查詢處理
平行索引作業

其他資源

sp_configure (Transact-SQL)
查詢提示 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助