平行查詢處理

SQL Server 提供平行查詢,讓擁有多個處理器 (CPU) 的電腦,也能獲得最佳的查詢執行和索引作業。因為 SQL Server 可利用數個作業系統執行緒平行地執行查詢或索引作業,所以可快速而有效率地完成作業。

在查詢最佳化期間,SQL Server 會搜尋得益於平行執行的查詢或索引作業。對於這些查詢,SQL Server 會在查詢執行計畫中插入交換運算子,以準備平行執行的查詢。所謂的交換運算子,是指查詢執行計畫中,提供存取管理、資料重新散佈以及流量控制的運算子。交換運算子包括當做子類型的 Distribute StreamsRepartition StreamsGather Streams 邏輯運算子,其中的一個或多個可以出現在平行查詢之查詢計畫的執行程序表輸出中。

插入交換運算子之後,結果便是平行查詢執行計畫。平行查詢執行計畫可以使用一個以上的執行緒。非平行查詢所使用的序列執行計畫,執行時只會使用一個執行緒。平行查詢實際所使用的執行緒數目,是在查詢計畫執行初始化時,由計畫的複雜度與平行處理原則的程度決定。平行處理原則的程度決定將要使用的 CPU 最大數目,而不是將要使用的執行緒數目。平行處理原則的程度值是在伺服器層級設定,可以使用 sp_configure 系統預存程序修改。您可以指定 MAXDOP 查詢提示或 MAXDOP 索引選項,來覆寫個別查詢或索引陳述式的這個值。

如果下列任何條件為真,則 SQL Server 查詢最佳化工具不使用平行執行計畫進行查詢:

  • 查詢的序列執行成本不夠高,無法考量替代平行執行計畫。

  • 序列執行計畫被認為比特定查詢之任何可能的平行執行計畫更快。

  • 此查詢包含無法平行執行的純量或關聯式運算子。特定運算子可能造成查詢計畫的一個區段以序列模式執行,或整個計畫以序列模式執行。