SQL PROFILE修改固定執行計劃
發給團隊的,有需要的可以參照下。下面是原文,懶的編輯了
SQL PROFILE的用法示例,下週週會給應用DBA演示下。一般只需要步驟三、四就可以完成執行計劃的修改和固定,而outline和baseline則需要N多個步驟。
SQL PROFILE使用簡單,不區分大小寫,回車,空格,但是對DBA寫HINT的能力要求比較高,因為SQL PROFILE要求HINT必須寫明查詢塊名。
我的示例裡教了大家偷懶的做法,但是有時間我們還是最好認真把query block的東西學下。
SQL PROFILE還有其他一些牛逼的特性,具體其他細節,週會上再說。
步驟一-------------------------建立測試表,根據DBA_OBJECTS建立,OBJECT_ID上有索引
Create table wxh_tbd as select * from dba_objects;
create index t_3 on wxh_tbd(object_id);
步驟二-------------------------檢視SQL預設執行計劃,走了索引
explain plan for select * from wxh_tbd where object_id= :a;
select * from table(dbms_xplan.display(null,null,'outline'));-------------------透過指定outline可以獲取到系統為我們生成的hint
-----------------------------------------------
| Id | Operation | Name |
-----------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| WXH_TBD |
|* 2 | INDEX RANGE SCAN | T_3 |
-----------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "WXH_TBD"@"SEL$1" ("WXH_TBD"."OBJECT_ID"))
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步驟3-------------------------如果我們想讓它走全表掃描,獲取全表掃描HINT
explain plan for select /*+ full(wxh_tbd) */* from wxh_tbd where object_id= :a;-----------增加HINT
select * from table(dbms_xplan.display(null,null,'outline'));------------可以看到全表掃描的hint已經為我們生成了,我們選取必要的hint就OK了,其他的可以不要
-------------------------------------
| Id | Operation | Name |
-------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| WXH_TBD |
-------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
FULL(@"SEL$1" "WXH_TBD"@"SEL$1")
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步驟4--------------------------使用sql profile
declare
v_hints sys.sqlprof_attr;
begin
v_hints := sys.sqlprof_attr('FULL(@"SEL$1" "WXH_TBD"@"SEL$1")'); ----------從上面Outline Data部分獲取到的HINT
dbms_sqltune.import_sql_profile('select * from wxh_tbd where object_id= :a', ----------SQL語句部分
v_hints,
'WXH_TBD', --------------------------------PROFILE 的名字
force_match => true);
end;
/
步驟五-------------------------檢視是否生效,已經生效了
explain plan for select * from wxh_tbd where object_id= :a;
select * from table(dbms_xplan.display);
--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| WXH_TBD |
--------------------------------------
Note
-----
- SQL profile "WXH_TBD" used for this statement
[ 本帖最後由 wei-xh 於 2011-6-9 16:48 編輯 ]
SQL PROFILE的用法示例,下週週會給應用DBA演示下。一般只需要步驟三、四就可以完成執行計劃的修改和固定,而outline和baseline則需要N多個步驟。
SQL PROFILE使用簡單,不區分大小寫,回車,空格,但是對DBA寫HINT的能力要求比較高,因為SQL PROFILE要求HINT必須寫明查詢塊名。
我的示例裡教了大家偷懶的做法,但是有時間我們還是最好認真把query block的東西學下。
SQL PROFILE還有其他一些牛逼的特性,具體其他細節,週會上再說。
步驟一-------------------------建立測試表,根據DBA_OBJECTS建立,OBJECT_ID上有索引
Create table wxh_tbd as select * from dba_objects;
create index t_3 on wxh_tbd(object_id);
步驟二-------------------------檢視SQL預設執行計劃,走了索引
explain plan for select * from wxh_tbd where object_id= :a;
select * from table(dbms_xplan.display(null,null,'outline'));-------------------透過指定outline可以獲取到系統為我們生成的hint
-----------------------------------------------
| Id | Operation | Name |
-----------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| WXH_TBD |
|* 2 | INDEX RANGE SCAN | T_3 |
-----------------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "WXH_TBD"@"SEL$1" ("WXH_TBD"."OBJECT_ID"))
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步驟3-------------------------如果我們想讓它走全表掃描,獲取全表掃描HINT
explain plan for select /*+ full(wxh_tbd) */* from wxh_tbd where object_id= :a;-----------增加HINT
select * from table(dbms_xplan.display(null,null,'outline'));------------可以看到全表掃描的hint已經為我們生成了,我們選取必要的hint就OK了,其他的可以不要
-------------------------------------
| Id | Operation | Name |
-------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| WXH_TBD |
-------------------------------------
Outline Data
-------------
/*+
BEGIN_OUTLINE_DATA
FULL(@"SEL$1" "WXH_TBD"@"SEL$1")
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.1.0.7')
OPTIMIZER_FEATURES_ENABLE('11.1.0.7')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/
步驟4--------------------------使用sql profile
declare
v_hints sys.sqlprof_attr;
begin
v_hints := sys.sqlprof_attr('FULL(@"SEL$1" "WXH_TBD"@"SEL$1")'); ----------從上面Outline Data部分獲取到的HINT
dbms_sqltune.import_sql_profile('select * from wxh_tbd where object_id= :a', ----------SQL語句部分
v_hints,
'WXH_TBD', --------------------------------PROFILE 的名字
force_match => true);
end;
/
步驟五-------------------------檢視是否生效,已經生效了
explain plan for select * from wxh_tbd where object_id= :a;
select * from table(dbms_xplan.display);
--------------------------------------
| Id | Operation | Name |
--------------------------------------
| 0 | SELECT STATEMENT | |
|* 1 | TABLE ACCESS FULL| WXH_TBD |
--------------------------------------
Note
-----
- SQL profile "WXH_TBD" used for this statement
[ 本帖最後由 wei-xh 於 2011-6-9 16:48 編輯 ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25462274/viewspace-2102539/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用sql profile固定執行計劃SQL
- 用sql profile來固定執行計劃SQL
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- 使用coe_xfr_sql_profile固定執行計劃SQL
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- SQL BASELINE修改固定執行計劃SQL
- zt_sql baseline_sql profile_sql outline修改固定執行計劃SQL
- 使用SQL Profile及SQL Tuning Advisor固定執行計劃SQL
- 控制執行計劃之-SQL Profile(一)SQL
- Oracle優化案例-coe_xfr_sql_profile固定執行計劃與刪除profile(二十五)Oracle優化SQL
- 用outline修改固定執行計劃
- baseline固定SQL執行計劃SQL
- Oracle手動固定SQL執行計劃OracleSQL
- 使用SQL PROFILE 給出合理的執行計劃SQL
- oracle 固定執行計劃Oracle
- Oracle優化案例-view merge與coe_load_sql_profile固定執行計劃(十五)Oracle優化ViewSQL
- 利用coe_xfr_sql_profile 改變執行計劃SQL
- oracle固定執行計劃--sqlprofileOracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- Oracle SQL_Profile手動生成及繫結sql執行計劃OracleSQL
- 【SPM】Oracle如何固定執行計劃Oracle
- 使用OUTLINE固定執行計劃
- sql 執行計劃SQL
- 使用SPM和STA進行固定執行計劃
- 影響執行計劃之oracle sql baseline與sql profile之互動OracleSQL
- Oracle利用coe_load_sql_profile指令碼繫結執行計劃OracleSQL指令碼
- Oracle緊急固定執行計劃之手段Oracle
- Oracle sql執行計劃OracleSQL
- SQL Server執行計劃SQLServer
- SQL的執行計劃SQL
- SQL執行計劃分析SQL
- 【sql調優之執行計劃】獲取執行計劃SQL
- 修改Process Chain的執行計劃AI
- oracle使用outline固定執行計劃事例Oracle
- 獲取SQL執行計劃SQL
- SQL 執行計劃案例1SQL
- 剖析SQL Server執行計劃SQLServer
- 檢視sql執行計劃SQL