了解 Aurora PostgreSQL 查詢計劃管理 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

了解 Aurora PostgreSQL 查詢計劃管理

為 Aurora PostgreSQL 資料庫叢集開啟查詢計劃管理後,最佳化工具會針對其處理多次的任何 SQL 陳述式產生並儲存查詢執行計劃。最佳化工具一律會將受管陳述式第一個產生之計劃的狀態設定為 Approved,並將它儲存於 dba_plans 檢視中。

針對受管陳述式儲存的核准計劃集稱為計劃基線。當您的應用程式執行時,最佳化工具可能會針對受管陳述式產生額外計劃。最佳化工具會將額外的擷取計劃設為 Unapproved 狀態。

之後,您可以判斷 Unapproved 計劃是否表現良好,然後將它們變更為 ApprovedRejectedPreferred。若要這麼做,您可以使用 apg_plan_mgmt.evolve_plan_baselines 函數或 apg_plan_mgmt.set_plan_status 函數。

當最佳化工具產生 SQL 陳述式的計劃時,查詢計劃管理會將計劃儲存在 apg_plan_mgmt.plans 資料表中。已獲授與 apg_plan_mgmt 角色的資料庫使用者可以透過查詢 apg_plan_mgmt.dba_plans 檢視來查看計劃詳細資訊。例如,下列查詢會針對非生產 Aurora PostgreSQL 資料庫叢集列出檢視中目前計劃的詳細資訊。

  • sql_hash – SQL 陳述式的識別碼,其為 SQL 陳述式標準化文字的雜湊值。

  • plan_hash – 計劃的唯一識別碼,其為 sql_hash 與計劃雜湊的組合。

  • status – 計劃的狀態。最佳化工具可以執行已核准的計劃。

  • enabled – 指出計劃已備妥可供使用 (true) 或未備妥 (false)。

  • plan_outline – 用來重建實際執行計劃的計劃表示法。樹狀結構中的運算子會對應到 EXPLAIN 輸出中的運算子。

apg_plan_mgmt.dba_plans 檢視還有更資料欄,其中包含計劃的所有詳細資訊,例如上次使用計劃的時間。如需完整詳細資訊,請參閱 apg_plan_mgmt.dba_plans 檢視的參考

標準化和 SQL 雜湊

apg_plan_mgmt.dba_plans 檢視中,您可以透過 SQL 雜湊值來識別受管陳述式。SQL 雜湊是根據已去掉某些差異 (例如常值) 的 SQL 陳述式標準化表示法來計算。

每個 SQL 陳述式的標準化程序都會保留空格和大小寫,因此您仍然可以閱讀並了解 SQL 陳述式的要點。標準化會移除或取代下列項目。

  • 前導區塊註釋

  • EXPLAIN 關鍵字和 EXPLAIN 選項,以及 EXPLAIN ANALYZE

  • 尾隨空格

  • 所有常值

以下列陳述式為例。

/*Leading comment*/ EXPLAIN SELECT /* Query 1 */ * FROM t WHERE x > 7 AND y = 1;

最佳化工具將此陳述式標準化如下。

SELECT /* Query 1 */ * FROM t WHERE x > CONST AND y = CONST;

標準化允許相同的 SQL 雜湊用於類似的 SQL 陳述式,這些陳述式可能僅在其常值或參數值有所不同。換言之,相同的 SQL 雜湊可能存在多個計劃,而不同的計劃在不同條件下成為最佳。

注意

與不同結構描述搭配使用的單一 SQL 陳述式有不同的計畫,因為它在執行時繫結至特定結構描述。規劃工具會將統計資料用於結構描述繫結來選擇最佳計劃。

若要深入了解最佳化工具如何選擇計劃,請參閱 使用 Aurora PostgreSQL 受管計劃。在該節中,您可以了解如何在實際使用計劃之前使用 EXPLAINEXPLAIN ANALYZE 預覽此計劃。如需詳細資訊,請參閱分析最佳化工具的所選擇計劃。如需概述選擇計劃之程序的影像,請參閱 最佳化工具如何選擇要執行的計劃