SQL 執(zhí)行計劃管理(SPM)

一、SPM 需求背景
任何數(shù)據(jù)庫應用程序的性能在很大程度上都依賴于查詢執(zhí)行,盡管優(yōu)化器無需用戶干預就可以評估最佳計劃,但是 SQL 語句的執(zhí)行計劃仍可能由于以下多種原因發(fā)生意外更改:版本升級、重新收集優(yōu)化器統(tǒng)計信息、改變優(yōu)化器參數(shù)或模式/元數(shù)據(jù)定義。由于無法保證計劃始終向更好的情況改變,如果在環(huán)境變化時能夠維持當前執(zhí)行計劃不變,或者只向更好的情況改變,將是最理想的解決方案。
?
二、SPM 重要構成
SQL 計劃管理 (SPM) 確保運行時性能永遠不會因為執(zhí)行計劃的更改而降低。因此,SQL 語句執(zhí)行時只使用已接受(受信任)的執(zhí)行計劃;跟蹤任何計劃發(fā)展并隨后對其進行評估,如果新計劃未造成運行時性能改變或運行時性能提高,則接受新計劃為經(jīng)驗證的計劃。
SQL 計劃管理由三部分組成:SQL 計劃基準捕獲,SQL 計劃基準選擇,SQL 計劃基準發(fā)展。
1. SQL 計劃基準捕獲
創(chuàng)建 SQL 計劃基準,包含所有 SQL 語句的受信任的執(zhí)行計劃(ACCETPED=YES)。
(1)如何創(chuàng)建 SQL 計劃基準
包含兩種方式:
自動捕獲執(zhí)行計劃
批量加載執(zhí)行計劃,包含四種技術
i 針對給定的 SQL 調(diào)優(yōu)集(STS)加載執(zhí)行計劃
ii 從存儲大綱加載執(zhí)行計劃
iii 使用游標緩存中目前的執(zhí)行計劃
iv?從臨時表解壓縮現(xiàn)有的 SQL 計劃基準
(2)如何查看 SQL 計劃基準
2. SQL 計劃基準選擇
(1)執(zhí)行計劃的三個屬性
ENABLED - 表示計劃已啟用,可供優(yōu)化器使用,若計劃未設置未 ENABLED,則優(yōu)化器不考慮此計劃。
ACCEPTED - 表示該計劃已被驗證為有效計劃,若計劃未驗證為 ACCEPTED,則優(yōu)化器不考慮此計劃。
FIXED -?固定計劃,表示優(yōu)化器只會考慮標記為?FIXED?的執(zhí)行計劃,且從中選擇?cost?最低的固定計劃。
(2)如何選擇 SQL 計劃

3. SQL 計劃基準發(fā)展
(1)SQL計劃基準發(fā)展的三種選擇
僅當其性能比現(xiàn)有SQL計劃基準更佳時才接受新計劃,邏輯如下圖
不進行性能驗證就接受新計劃
運行性能比較并生成報告,但不發(fā)展新計劃
(2)如何發(fā)展SQL計劃基準
?

1. 初始化參數(shù)
optimizer_capture_sql_plan_baselines - 控制可重復 SQL 語句的新 SQL 計劃基準的自動捕獲,默認設置為 FALSE
optimizer_use_sql_plan_baselines - 控制 SQL 計劃基準的使用,啟用后,優(yōu)化器在 SQL 計劃基準中尋找正在編譯的 SQL 語句的計劃,如果找到,優(yōu)化器會計算各個計劃的性能開銷,然后選擇開銷最低的計劃。默認設置為 TRUE
2. 管理 SQL 管理庫的空間使用
管理庫包括語句日志、計劃歷史記錄和 SQL 計劃基準。
存儲:SQL 管理庫是數(shù)據(jù)庫字典的組成部分,存儲在 SYSAUX 表空間中。SQL 管理庫默認占用不超過 SYSAUX 表空間的 10%,可設置為 1%-50%。每周檢測,若超過該限制,則會告警。
清理:每周定期清理執(zhí)行計劃,默認超過 53 周未使用的計劃都會被清理,可設置為 5-523 周。