新聞中心
SQL Plan Management(SPM)是一種穩(wěn)定執(zhí)行計劃、控制計劃演進的機制,確保新生成的計劃在經(jīng)過驗證后才能使用,保證計劃性能朝好的方向不斷更新。

創(chuàng)新互聯(lián)建站"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設擁有電腦版、微信版、手機版的企業(yè)網(wǎng)站。實現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡+移動網(wǎng)絡一網(wǎng)打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)建站具備承接各種類型的成都網(wǎng)站設計、網(wǎng)站制作項目的能力。經(jīng)過十多年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務,并獲得了客戶的一致好評。
SPM 基于 SQL Plan Baseline 實現(xiàn),SQL Plan Baseline 是執(zhí)行計劃的一個基線,持久化存儲已經(jīng)驗證過的執(zhí)行計劃的信息(outline_data 等信息),每個執(zhí)行計劃可對應一個 Plan Baseline,通過該 Plan Baseline 可復現(xiàn)一個執(zhí)行計劃。
SPM 包含如下過程:
-
計劃捕獲。
對于新生成的計劃,如果 SQL Plan Baseline 為空,則直接加入 SQL Plan Baseline,否則通過演進驗證新生成計劃比 SQL Plan Baseline 中計劃性能更優(yōu)后加入 SQL Plan Baseline,并刪除舊的 Plan Baseline。
-
計劃演進。
相同 SQL 新捕獲的計劃如果和 SQL Plan Baseline 中計劃不一樣,則通過流量灰度驗證新計劃性能是否比以前驗證過的計劃更優(yōu)。如果更優(yōu),則將新計劃加入 SQL Plan Baseline,并執(zhí)行新計劃,否則仍使用舊計劃。
-
計劃選擇。
在優(yōu)化器新生成計劃時,會查看 SQL Plan Baseline 是否有已驗證的計劃,如果有,則優(yōu)先使用已驗證計劃,新計劃需要通過演進驗證后再使用。
SPM 的系統(tǒng)變量
SPM 使用如下系統(tǒng)變量和系統(tǒng)包對執(zhí)行計劃進行管理:
|
系統(tǒng)變量 |
取值 |
解釋 |
|---|---|---|
|
optimizer_capture_sql_plan_baselines | true | 對于新生成的計劃,如果該 SQL 沒有對應的 Plan Baseline,則將該計劃加入到 SQL Plan Baseline;如果已有 Plan Baseline 且與新計劃不同,則會觸發(fā)計劃演進進行驗證,確定是否需要將新計劃替換老的 Plan Baseline。 |
false | 再自動捕獲新計劃到 Plan Baseline 中。 | |
|
optimizer_use_sql_plan_baselines | true | 在新生成計劃時,優(yōu)化器會優(yōu)先使用 Plan Baseline 計劃,對于新的不同計劃則驗證后通過后才使用。 |
false | 在新生成計劃時,不在考慮 Plan Baseline 中計劃,直接使用優(yōu)化器新生成計劃并執(zhí)行。 |
設置說明如下:
|
optimizer_capture_sql_plan_baselines 的取值 |
optimizer_use_sql_plan_baselines 的取值 |
說明 |
|---|---|---|
True | True | 計劃捕獲和演進均打開,優(yōu)化器會使用 Plan Baseline 計劃。 |
True | False | Plan Baseline 中無計劃時會捕獲計劃到 Plan Baseline,不演進,優(yōu)化器不考慮 Plan Baseline 計劃,使用新生成計劃。 |
False | True | 不捕獲計劃到 Plan Baseline, 優(yōu)化器會使用 Plan Baseline 計劃,如果 SQL Plan Baseline 沒有對應計劃,則使用新生成計劃。 |
False | False | 不捕獲計劃,不演進,優(yōu)化器不使用 Plan Baseline 計劃,使用新生成的計劃。 |
DBMS_SPM
DBMS_SPM 是用于操作 SPM 的命令包,可支持加載、更改以及刪除 Plan Baseline 信息。
LOAD_PLANS_FROM_CURSOR_CACHE
LOAD_PLANS_FROM_CURSOR_CACHE 用于將 plan cache 中執(zhí)行計劃對應的 Plan Baseline 信息加載到 _ _all_tenant_plan_baseline 表中。語法如下:
說明
_ _all_tenant_plan_baseline 為 OceanBase 數(shù)據(jù)庫內(nèi)部表。
DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE (
sql_id IN VARCHAR2,
plan_hash_value IN NUMBER := NULL,
fixed IN VARCHAR2 := 'NO',
enabled IN VARCHAR2 := 'YES')
RETURN PLS_INTEGER;參數(shù)解釋如下:
|
參數(shù) |
解釋 |
|---|---|
sql_id | SQL 的唯一標識。 |
plan_hash_value | plan 的唯一標識。如果為空,則處理 sql_id 下的所有計劃。 |
fixed | 加入到 SQL Plan Baseline 后是否將該計劃固化。固化后以后優(yōu)化器會直接選擇該計劃,不再捕獲和演進計劃。 |
enabled | 優(yōu)化器是否可以使用該 Plan Baseline。 |
如下例所示:
DECLARE
v_load_plans number;
BEGIN
v_load_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => '529F6E6454EF579C7CC265D1F6131D70',
plan_hash_value => 13388268709115914355);
END;
/
ALTER_SQL_PLAN_BASELINE
ALTER_SQL_PLAN_BASELINE 用于修改 Plan Baseline 中某些屬性。語法如下:
DBMS_SPM.ALTER_SQL_PLAN_BASELINE (
sql_handle IN VARCHAR2 := NULL,
plan_name IN VARCHAR2 := NULL,
attribute_name IN VARCHAR2,
attribute_value IN VARCHAR2)
RETURN PLS_INTEGER;參數(shù)解釋如下:
|
參數(shù) |
解釋 |
|---|---|
sql_handle | SQL 的唯一標識。先用 sql_id 代替。 |
plan_name | plan 的唯一標識。先使用 plan_hash_value 代替。 |
attribute_name | 需要更改的字段名。OceanBase 數(shù)據(jù)庫支持修改 enabled 和 fixed 字段。 |
attribute_value | 更改后的值。 |
如下示例所示,將某個 Plan Baseline 固化后該 SQL 僅使用該計劃:
DECLARE
v_alter_plans number;
BEGIN
v_alter_plans := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => '529F6E6454EF579C7CC265D1F6131D70',
plan_name => '3388268709115914355',
attribute_name => 'fixed',
attribute_value => 'YES' );
END;
/
DROP_SQL_PLAN_BASELINE
DROP_SQL_PLAN_BASELINE 用于刪掉某個 Plan Baseline。語法如下:
DBMS_SPM.DROP_SQL_PLAN_BASELINE (
sql_handle IN VARCHAR2 := NULL,
plan_name IN VARCHAR2 := NULL)
RETURN PLS_INTEGER;示例如下:
DECLARE
v_drop_plans number;
BEGIN
v_drop_plans := DBMS_SPM.DROP_SQL_PLAN_BASELINE(
sql_handle => '529F6E6454EF579C7CC265D1F6131D70',
plan_name => '3388268709115914355' );
END;
/ 網(wǎng)站題目:創(chuàng)新互聯(lián)OceanBase教程:OceanBase執(zhí)行計劃管理
URL標題:http://m.fisionsoft.com.cn/article/ccccdss.html


咨詢
建站咨詢
