Aurora 郵報SQL查詢計劃管理 - Amazon Aurora

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

Aurora 郵報SQL查詢計劃管理

為 Aurora Postgre SQL 資料庫叢集開啟查詢計劃管理後,最佳化工具會針對多次處理的任何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 Postgre 資料庫叢集列出目前在檢視中的計劃詳細資SQL料。

  • sql_hash— SQL 陳述式的識別碼,也就是陳述式標準化文字的SQL雜湊值。

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

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

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

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

apg_plan_mgmt.dba_plans 檢視還有更資料欄,其中包含計劃的所有詳細資訊,例如上次使用計劃的時間。如需完整詳細資訊,請參閱 對於 Aurora 郵政兼容版本的計劃視圖的參考 SQL

規範化和散列 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 預覽此計劃。如需詳細資訊,請參閱 分析最佳化工具的所選擇計劃。如需概述選擇計劃之程序的影像,請參閱 最佳化工具如何選擇要執行的計劃