擷取 Aurora PostgreSQL 執行計畫 - Amazon Aurora

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

擷取 Aurora PostgreSQL 執行計畫

Aurora PostgreSQL 查詢計劃管理提供兩種不同的模式 (自動或手動) 來擷取查詢執行計劃。您可以透過將 apg_plan_mgmt.capture_plans_baselines 值設定為 automaticmanual 來選擇模式。您可以使用手動計劃擷取,以擷取特定 SQL 陳述式的執行計劃。您也可以使用自動計劃擷取,以擷取當您的應用程式執行時,已執行兩次或更多次的所有 (或最慢) 計劃。

當擷取計劃時,最佳化工具會將針對受管陳述式而擷取的第一個計劃設為 approved 狀態。最佳化工具會將針對受管陳述式而擷取的任何額外計劃設為 unapproved 狀態。然而,有時可能會儲存不止一個具有 approved 狀態的計劃。當有多個計劃針對某一陳述式被並行建立,而且該陳述式的第一個計劃被遞交之前,可能會發生此種情況。

若要控制可擷取和存放在 dba_plans 檢視中的計劃數量上限,請在資料庫執行個體層級參數群組中設定 apg_plan_mgmt.max_plans 參數。變更 apg_plan_mgmt.max_plans 參數之後需要重新啟動資料庫執行個體,新的值才會生效。如需更多詳細資訊,請參閱 apg_plan_mgmt.max_plans 參數。

針對特定 SQL 陳述式來手動擷取計劃

如果您有一組已知的 SQL 陳述式需要管理,請將陳述式放入 SQL 指令碼檔案中,然後手動擷取計劃。以下顯示的 psql 範例示範如何針對一組 SQL 陳述式來手動擷取查詢計劃。

psql> SET apg_plan_mgmt.capture_plan_baselines = manual; psql> \i my-statements.sql psql> SET apg_plan_mgmt.capture_plan_baselines = off;

在擷取每個 SQL 陳述式的計劃之後,最佳化工具會在 apg_plan_mgmt.dba_plans 檢視中新增一列。

我們建議您在 SQL 指令碼檔案中使用 EXPLAIN 或 EXPLAIN EXECUTE 陳述式。請確認您在參數值中容納了足夠的變化,以擷取您關心的所有計劃。

如果您知道比最佳化工具的最低成本計劃更好的計劃,您可以強制最佳化工具使用更好的計劃。若要這麼做,請指定一個或多個最佳化工具提示。如需更多詳細資訊,請參閱 使用 pg_hint_plan 修正計劃。若要比較 unapprovedapproved 計劃的效能,並核准、拒絕或刪除它們,請參閱評估計劃效能

自動擷取計劃

在如下的情況中,請使用自動計劃擷取:

  • 您不知道您想管理的特定 SQL 陳述式。

  • 您有數百或數千個 SQL 陳述式需要管理。

  • 您的應用程式使用用戶端 API。例如,JDBC 使用未命名的備妥陳述式或大量模式陳述式,但無法以 psql 表達。

自動擷取計劃
  1. 在資料庫執行個體層級參數群組中,將 apg_plan_mgmt.capture_plan_baselines 設為 automatic,以啟用自動計劃擷取。如需更多詳細資訊,請參閱 修改 Aurora 數據庫參數組中的參數

  2. 重新啟動您的資料庫執行個體。

  3. 當應用程式執行時,最佳化工具會針對至少執行兩次的每個 SQL 陳述式來擷取計劃。

    當應用程式以預設查詢計劃管理參數設定來執行時,最佳化工具會針對至少執行兩次的每個 SQL 陳述式來擷取計劃。使用預設值時擷取所有計劃的執行時間額外負荷非常小,適用於生產環境。

停用自動計劃擷取
  • 從資料庫執行個體層級參數群組,將 apg_plan_mgmt.capture_plan_baselines 參數設為 off

若要測量未核准計劃的效能,並核准、拒絕或刪除它們,請參閱評估計劃效能