Aurora 後SQL查詢計劃管理的功能參考 - Amazon Aurora

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

Aurora 後SQL查詢計劃管理的功能參考

apg_plan_mgmt 延伸提供下列函數。

apg_plan_mgmt.copy_outline

將給定的SQL計劃雜湊和計劃大綱複製到目標SQL計劃雜湊和大綱,從而覆寫目標的計劃雜湊和大綱。此函數可在 apg_plan_mgmt 2.3 及更高版本中使用。

語法

apg_plan_mgmt.copy_outline( source_sql_hash, source_plan_hash, target_sql_hash, target_plan_hash, force_update_target_plan_hash )
傳回值

複製成功時傳回 0。引發無效輸入的例外狀況。

參數

參數 描述
source_sql_hash 與要複製到目標查詢之 plan_hash 相關聯的 sql_hash ID。
source_plan_hash 要複製到目標查詢的 plan_hash ID。
target_sql_hash 要使用來源計畫雜湊和大綱更新之查詢的 sql_hash 識別符。
target_plan_hash 要使用來源計畫雜湊和大綱更新之查詢的 plan_hash 識別符。
force_update_target_plan_hash (選擇性) 即使來源計劃無法針對. target_plan_hash target_sql_hash 當設定為 true 時,函數可用於跨架構複製關係名稱和資料行一致的計劃。

使用須知

此函數可讓您將使用提示的計畫雜湊與計畫大綱複製到其他類似的陳述式,因此使您無需在其每次出現在目標陳述式中時都使用內嵌提示陳述式。如果更新的目標查詢產生無效的計畫,則此函數會引發錯誤並復原所嘗試的更新。

apg_plan_mgmt.delete_plan

刪除受管計劃。

語法

apg_plan_mgmt.delete_plan( sql_hash, plan_hash )
傳回值

如果成功刪除,則傳回 0,如果刪除失敗,則傳回 -1。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。

apg_plan_mgmt.evolve_plan_baselines

驗證已核准的計劃是否較快,或查詢最佳化工具所識別為最低成本計劃的計劃是否較快。

語法

apg_plan_mgmt.evolve_plan_baselines( sql_hash, plan_hash, min_speedup_factor, action )

傳回值

沒有比最佳已核准的計劃更快的計劃數量。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。用NULL來表示具有相同 sql_hash ID 值的所有計劃。
min_speedup_factor

最小加速因素可以是一個計劃必須比目前已核准計劃中的最佳計劃快,使其能被核准的倍數。這個因素也可以是一個計劃慢到必須被拒絕或停用的倍數。

這是正浮點值。

action

函數執行的動作。有效值如下。大小寫不重要。

  • 'disable' – 停用不符合最小加速因素的每個相符計劃。

  • 'approve' – 啟用符合最小加速因素的每個相符計劃,並將其狀態設定為 approved

  • 'reject' – 對於不符合最小加速因素的每個相符計劃,將其狀態設定為 rejected

  • NULL— 函數只會傳回沒有效能優勢的計劃數目,因為它們不符合最低加速因素。

使用須知

根據規劃時間加上執行時間比最佳已核准計劃更快的程度是否達到一個可設定的因素,而將指定的計劃設為已核准、已拒絕或已停用。action 參數可能設為 'approve''reject',以自動核准或拒絕符合效能條件的計劃。或者,可能設為 '' (空字串) 以執行效能試驗並產生報告,但不採取任何動作。

對於最近已執行過 apg_plan_mgmt.evolve_plan_baselines 函數的計劃,您可以避免漫無目標地重新執行該函數。若要這麼做,請將計劃限制為最近建立,但尚未核准的計劃。或者,您可以避免在有最近 apg_plan_mgmt.evolve_plan_baselines 時間戳記的任何已核准計劃上執行 last_verified 函數。

進行效能試驗,相對於基線中的其他計劃,比較每個計劃的規劃時間加上執行時間。在某些情況下,陳述式只有一個計劃,而且已核准此計劃。在此情況下,請比較該計劃與不使用任何計劃時的規劃時間加上執行時間。

每個計劃增加的優點 (或缺點) 都記錄在 apg_plan_mgmt.dba_plans 檢視的 total_time_benefit_ms 欄。當此值為正數時,有可測量的效能優點足以將此計劃納入基線中。

除了收集每個候選計劃的規劃時間和執行時間,last_verified 檢視的 apg_plan_mgmt.dba_plans 欄也會更新為 current_timestamplast_verified 時間戳記可用來避免在最近已驗證效能的計劃上再次執行此函數。

apg_plan_mgmt.get_explain_plan

產生指定EXPLAIN陳述式的陳述SQL式文字。

語法

apg_plan_mgmt.get_explain_plan( sql_hash, plan_hash, [explainOptionList] )
傳回值

傳回指定SQL陳述式的執行階段統計資料。不使用 explainOptionList 傳回簡單的 EXPLAIN 計劃。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。
explainOptionList

以逗號區隔的說明選項清單。有效值包括 'analyze''verbose''buffers''hashes''format json'。如果explainOptionList是NULL或空字串 (「),則此函數會產生不含任何統計資料的EXPLAIN陳述式。

使用須知

對於 explainOptionList,您可以使用任何與 EXPLAIN 陳述式搭配使用相同的選項。Aurora Postgre SQL 最佳化工具會串連您提供給陳述式的選項清單。EXPLAIN

apg_plan_mgmt.plan_last_used

從共用記憶體中傳回指定計劃的 last_used 日期。

注意

共用記憶體中的值始終是資料庫叢集中主要資料庫執行個體上的最新值。該值只會定期清空到 apg_plan_mgmt.dba_plans 檢視的 last_used 欄。

語法

apg_plan_mgmt.plan_last_used( sql_hash, plan_hash )
傳回值

傳回 last_used 日期。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。

apg_plan_mgmt.reload

apg_plan_mgmt.dba_plans 檢視中將計劃重新載入共用記憶體。

語法

apg_plan_mgmt.reload()

傳回值

無。

參數

無.

使用須知

在下列情況中,呼叫 reload

  • 用來立即重新整理唯讀複本的共用記憶體,而非等待新的計劃傳播到複本。

  • 在匯入受管計劃之後使用。

apg_plan_mgmt.set_plan_enabled

啟用或停用受管計劃。

語法

apg_plan_mgmt.set_plan_enabled( sql_hash, plan_hash, [true | false] )

傳回值

如果成功設定,則傳回 0,如果設定失敗,則傳回 -1。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。
enabled

布林值 true 或 false:

  • 值為 true 會啟用計劃。

  • 值為 false 會停用計劃。

apg_plan_mgmt.set_plan_status

將受管理計劃的狀態設定為 ApprovedUnapprovedRejectedPreferred

語法

apg_plan_mgmt.set_plan_status( sql_hash, plan_hash, status )

傳回值

如果成功設定,則傳回 0,如果設定失敗,則傳回 -1。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。
status

具有下列其中一個數值的字串:

  • 'Approved'

  • 'Unapproved'

  • 'Rejected'

  • 'Preferred'

您使用的案例並不重要,但狀態值在 apg_plan_mgmt.dba_plans 檢視中會設為初始大寫。如需這些值的詳細資訊,請參閱 status中的 對於 Aurora 郵政兼容版本的計劃視圖的參考 SQL

apg_plan_mgmt.update_plans_last_used

立即更新具有共用記憶體中存放之 last_used 日期的計劃表。

語法

apg_plan_mgmt.update_plans_last_used()

傳回值

無。

參數

無.

使用須知

呼叫 update_plans_last_used 以確保針對 dba_plans.last_used 欄的查詢使用最新的資訊。如果 last_used 日期未立即更新,則背景程序會更新具有 last_used 日期的計畫表,預設為每小時一次。

例如,如果具有特定 sql_hash 的陳述式開始緩慢執行,您可以決定自效能回歸開始以來,已執行該陳述式的哪些計劃。若要執行這項操作,請先將共用記憶體中的資料清空到磁碟,讓 last_used 日期是最新的,然後利用效能回歸查詢陳述式的所有 sql_hash 計畫。在查詢中,確保 last_used 日期大於或等於效能回歸開始的日期。此查詢會識別可能負責效能回歸的計劃或計劃集。您可以使用 apg_plan_mgmt.get_explain_plan 與設為 verbose, hashesexplainOptionList 搭配。您也可以使用 apg_plan_mgmt.evolve_plan_baselines,來分析計劃和任何可能表現更好的替代計劃。

update_plans_last_used 函數只會影響資料庫叢集的主要資料庫執行個體。

apg_plan_mgmt.validate_plans

驗證最佳化工具仍可重建計劃。最佳化工具會驗證 ApprovedUnapprovedPreferred 計劃,而不論計劃已啟用或已停用。不會驗證 Rejected 計劃。您可以選擇性使用 apg_plan_mgmt.validate_plans 函數來刪除或停用無效的計劃。

語法

apg_plan_mgmt.validate_plans( sql_hash, plan_hash, action) apg_plan_mgmt.validate_plans( action)

傳回值

無效計劃的數量。

參數

參數 描述
sql_hash 計劃受管理SQL陳述式的sql_hash識別碼。
plan_hash 受管計劃的 plan_hash ID。用NULL來表示相同 sql_hash ID 值的所有計劃。
action

函數對無效計劃執行的動作。有效字串值如下。大小寫不重要。

  • 'disable' – 停用每個無效計劃。

  • 'delete' – 刪除每個無效計劃。

  • 'update_plan_hash' – 更新無法完全複製的計劃的 plan_hash ID。它還允許您通過重寫來修復計劃。SQL然後,您可以將好計劃註冊為原始Approved計劃SQL。

  • NULL— 該函數只返回無效計劃的數量。不會執行其他動作。

  • '' – 空字串會產生訊息,指出有效和無效計劃的數量。

其他任何值視為空字串。

使用須知

使用 validate_plans(action) 形式來驗證整個 apg_plan_mgmt.dba_plans 檢視中所有受管陳述式的所有受管計劃。

使用 validate_plans(sql_hash, plan_hash, action) 形式來針對 plan_hash 指定的受管陳述式,驗證 sql_hash 指定的受管計劃。

使用 validate_plans(sql_hash, NULL, action) 形式來針對 sql_hash 指定的受管陳述式,驗證所有受管計劃。