本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 |
函數執行的動作。有效值如下。大小寫不重要。
|
使用須知
根據規劃時間加上執行時間比最佳已核准計劃更快的程度是否達到一個可設定的因素,而將指定的計劃設為已核准、已拒絕或已停用。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_timestamp
。last_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 |
以逗號區隔的說明選項清單。有效值包括 |
使用須知
對於 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:
|
apg_plan_mgmt.set_plan_status
將受管理計劃的狀態設定為 Approved
、Unapproved
、Rejected
或 Preferred
。
語法
apg_plan_mgmt.set_plan_status(
sql_hash,
plan_hash,
status
)
傳回值
如果成功設定,則傳回 0,如果設定失敗,則傳回 -1。
參數
參數 | 描述 |
---|---|
sql_hash |
計劃受管理SQL陳述式的sql_hash 識別碼。 |
plan_hash |
受管計劃的 plan_hash ID。 |
status |
具有下列其中一個數值的字串:
您使用的案例並不重要,但狀態值在 |
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, hashes
的 explainOptionList
搭配。您也可以使用 apg_plan_mgmt.evolve_plan_baselines
,來分析計劃和任何可能表現更好的替代計劃。
update_plans_last_used
函數只會影響資料庫叢集的主要資料庫執行個體。
apg_plan_mgmt.validate_plans
驗證最佳化工具仍可重建計劃。最佳化工具會驗證 Approved
、Unapproved
和 Preferred
計劃,而不論計劃已啟用或已停用。不會驗證 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 |
函數對無效計劃執行的動作。有效字串值如下。大小寫不重要。
其他任何值視為空字串。 |
使用須知
使用 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
指定的受管陳述式,驗證所有受管計劃。