日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL Plan Management介绍

發布時間:2025/7/14 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL Plan Management介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于成本的優化法則基于統計信息找到最優執行計劃,但是一些環境的變化可能影響執行計劃的改變如:

·???????? New optimizer version

·???????? Changes to optimizer statistics and optimizer parameters

·???????? Changes to schema and metadata definitions

·???????? Changes to system settings

·???????? SQL profile creating

執行計劃的變化有兩個方向,更好的性能和更差的性能, 11g以前為了保證執行計劃的穩定性通過Stored Outlines和鎖定統計信息,但是這樣屏蔽了優化的一些新的特性和更優的執行計劃,11g SPM很好的解決了始終保證執行計劃朝著更好的性能發展。SPM自動管理執行計劃,當一個新的執行計劃被發現,不是立即被使用,而是被確保被驗證該計劃比歷史執行計劃有著更好的性能才被使用。

1. SQL Plan Baselines 捕獲

自動捕獲

設置參數OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES?為true

被開啟后系統自動創建并維護執行計劃歷史記錄,執行計劃歷史包含sql語句,綁定變量,編譯環境等,第一次生成的執行計劃被標記為accepted狀態,代表執行計劃歷史和sql plan baseline。后來生成的執行計劃被加入執行計劃歷史被標記為non-accepted狀態,直到被驗證不會帶來性能下降。

手動捕獲

從SQL Tuning Sets 和 AWR Snapshots加載

DECLARE

my_plans pls_integer;

BEGIN

? my_plans := DBMS_SPM.LOAD_PLANS_FROM_SQLSET(

??? sqlset_name => 'tset1');

END;

/

?Cursor Cache加載

DECLARE

my_plans pls_integer;

BEGIN

? my_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(

??? sql_id => '99twu5t2dn5xd');

END;

/

2. SQL Plan Baselines選擇

1 OPTIMIZER_USE_SQL_PLAN_BASELINES?設置為 TRUE

2 在sql編譯過程中,優化器基于成本的優化法則首先構建一個最優執行計劃,然后去sql plan baseline找到匹配的計劃,如果能找到就使用該執行計劃,如果找不到優化器將要評估sql plan baseline中狀態為accepted狀態的計劃,找到一個成本最低的來執行,并新生成的執行計劃加入到sql plan baseline中標記為non-accepted狀態,不能被使用,直到被驗證不會引起性能下降后被標記為accepted后才可以使用。

3. SQL Plan Baselines演化

Sql plan從non-accepted到accepted的過程,手動演化的語句如下:

SET SERVEROUTPUT ON

SET LONG 10000

DECLARE

??? report clob;

BEGIN

??? report := DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE(

? ????????????????sql_handle => 'SYS_SQL_593bc74fca8e6738');

??? DBMS_OUTPUT.PUT_LINE(report);

END;

/

12c引入了SYS_AUTO_SPM_EVOLVE_TASK自動作業verification non-accepted狀態的sql plan

4. SQL Plan Baselines 與 the SQL Tuning Advisor

當與SQL Tuning Advisor優化SQL語句,如果找到一個調整計劃,并驗證其性能要比從相應的SQL plan baseline選擇了一個更好的計劃,它使一個建議,接受SQL profile。當SQL profile被接受,調整計劃被添加到相應的SQL plan baseline。

5. 查看SQL Plan Baselines

select sql_handle, sql_text, plan_name, origin,

enabled, accepted, fixed, autopurge

from dba_sql_plan_baselines;

select * from table(

??? dbms_xplan.display_sql_plan_baseline(

??????? sql_handle=>'SYS_SQL_209d10fabbedc741',

??????? format=>'basic'));

6. Database upgrade與SQL Plan Management

方式一

使用SQL Tuning Sets

可以選擇(cursor cache, workload repository或者其他SQL Tuning Sets)創建一個新的SQL Tuning Sets

BEGIN

SYS.DBMS_SQLTUNE.CREATE_SQLSET (

sqlset_name => 'SPM_STS',

description => '10g plans');

END;

\

從cursor cache填充SQL Tuning Sets

?

DECLARE

stscur dbms_sqltune.sqlset_cursor;

BEGIN

OPEN stscur FOR

SELECT VALUE(P)

FROM TABLE(dbms_sqltune.select_cursor_cache(

‘parsing_schema_name <> ‘‘SYS’’’,

null, null, null, null, 1, null, 'ALL')) P;

-- populate the sqlset

dbms_sqltune.load_sqlset(sqlset_name => 'SPM_STS',

populate_cursor => stscur);

END;

/

加載到SPM

SQL> Variable cnt number

SQL> execute :cnt := DBMS_SPM.LOAD_PLANS_FROM_SQLSET( -

sqlset_name => 'SPM_STS');

?

方式二

從 Stored Outlines導入SPM

1? alter system set CREATE_STORED_OUTLINES=OLDPLAN;

2 執行應用sql或者開啟應用

3 alter system set CREATE_STORED_OUTLINES=false;

4 導出exp outln/outln file=soutline.dmp owner=outln rows=y

5 導入SPM

variable report clob;

exec :report:=DBMS_SPM.MIGRATE_STORED_OUTLINE( -

attribute_name=>'OUTLINE_NAME', attribute_value =>

'OLDPLAN');

?方式三

如果升級前沒有捕獲執行計劃,可以選擇此方式

首先設置參數OPTIMIZER_FEATURES_ENABLE到10g,然后捕獲10g sql plan,然后再加載到SPM,最后再設置OPTIMIZER_FEATURES_ENABLE為11g

注意:捕獲的執行計劃需要使用10g的統計信息 詳細流程如下圖

7. SQL 管理庫策略

Sql plan base 相關信息存儲在SQL Management Base,是數據庫字典的一部分,存儲在sysaux表空間,默認最大限制是sysaux表空間的10%可以通過以下方式更改限制值

BEGIN

? DBMS_SPM.CONFIGURE(

??? 'space_budget_percent',30);

END;

/

也可以設置沒有使用的sql plan保留時間,默認是53周,plan_retention_weeks的范圍值是5-523

可以通過以下方式進行調整

BEGIN

? DBMS_SPM.CONFIGURE(

??? 'plan_retention_weeks',105);

END;

/

配置參數查詢

select parameter_name, parameter_value from dba_sql_management_config;

?

PARAMETER_NAME???????????????? PARAMETER_VALUE

------------------------------ ---------------

SPACE_BUDGET_PERCENT??????????????????????? 30

PLAN_RETENTION_WEEKS???????????????? ??????105

?

總結

以上是生活随笔為你收集整理的SQL Plan Management介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。