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

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


咨詢(xún)
建站咨詢(xún)
