本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
查詢計劃和執行工作流程
下表提供查詢計畫和執行工作流程的整體檢視。
查詢計畫和執行工作流程會遵循這些步驟:
-
領導節點會收到查詢並剖析 SQL。
-
剖析器會產生初始查詢樹狀目錄,它是原始查詢的邏輯呈現。然後,Amazon Redshift 會將此查詢樹狀目錄輸入至查詢最佳化器。
-
最佳化器會進行評估,並且在必要時重新編寫查詢以最佳化其效率。此程序有時會造成建立多個相關的查詢來取代單一查詢。
-
最佳化器會產生一個查詢計畫 (或數個,如果先前的步驟產生多個查詢) 以利用最佳效能執行。查詢計畫會指定執行選項,例如:聯結類型、聯結順序、彙整選項和資料配送需求。
您可以使用 EXPLAIN 命令來檢視查詢計畫。查詢計畫為用於分析和調校複雜查詢的基礎工具。如需詳細資訊,請參閱建立和解譯查詢計劃。
-
執行引擎會將查詢計畫轉譯為步驟、區段和串流:
- 步驟
-
每個步驟為查詢執行期間所需的個別操作。您可以結合步驟,以允許運算節點執行查詢、聯結或其他資料庫操作。
- 區段
-
可以透過單一程序完成的數個步驟組合,也是可由運算節點配量執行的最小的編譯單位。配量是 Amazon Redshift 中平行處理的單位。串流中的區段會平行執行。
- 串流
-
要透過可用運算節點配量打包的區段的集合。
執行引擎會根據步驟、區段和串流產生編譯的程式碼。相較於轉譯的程式碼,編譯的程式碼執行得更快速,並且使用較少運算容量。然後將此編譯的程式碼播送至運算節點。
注意
設定查詢的基準時,應該一律比較查詢的第二個執行的時間,因為第一個執行時間包含編譯程式碼的間接。如需詳細資訊,請參閱影響查詢效能的因素。
-
運算節點配量會平行執行查詢區段。隨著此程序,Amazon Redshift 會利用最佳化的網路通訊、記憶體和磁碟管理,在查詢計畫步驟之間傳遞中繼結果。這也有助於加快查詢執行速度。
步驟 5 和 6 會對每個串流發生一次。引擎會為一個串流建立可執行的區段,並將它們傳送至運算節點。當該串流的區段完成時,引擎會產生下一個串流的區段。以此方式,引擎可以分析前一個串流中發生的動作 (例如,操作是否基於磁碟) 以影響下一個串流中區段的產生。
當運算節點完成時,它們會將查詢結果傳回至領導者節點供最終處理。領導者節點會將資料合併至單一結果集,並解決任何需要的排序或彙整。然後領導者節點會將結果傳回至用戶端。
注意
在查詢執行期間,運算節點可能會在必要時傳回一些資料至領導者節點。例如,如果您有子查詢具有子LIMIT句,則限制會套用至領導節點,然後再將資料重新分佈到叢集以進行進一步處理。