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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- Oracle優化案例-coe_xfr_sql_profile固定執行計劃與刪除profile(二十五)Oracle優化SQL
- Oracle優化案例-view merge與coe_load_sql_profile固定執行計劃(十五)Oracle優化ViewSQL
- oracle 固定執行計劃Oracle
- Oracle利用coe_load_sql_profile指令碼繫結執行計劃OracleSQL指令碼
- oracle使用outline固定執行計劃事例Oracle
- Oracle sql執行計劃OracleSQL
- Oracle緊急固定執行計劃之手段Oracle
- 如何檢視SQL的執行計劃SQL
- 執行計劃-1:獲取執行計劃
- MySQL——通過EXPLAIN分析SQL的執行計劃MySqlAI
- SQL優化案例-從執行計劃定位SQL問題(三)SQL優化
- SQL最佳化案例-從執行計劃定位SQL問題(三)SQL
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 獲取oracle sql語句詳細些執行計劃OracleSQL
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- spark sql語句效能最佳化及執行計劃SparkSQL
- 檢視SQL執行計劃的幾種常用方法YQSQL
- 達夢資料庫SQL執行計劃檢視方法資料庫SQL
- 【TUNE_ORACLE】定製化執行計劃SQL參考OracleSQL
- 在MySQL中使用explain查詢SQL的執行計劃MySqlAI
- Oracle檢視sql_id 的歷史執行計劃OracleSQL
- MySQL執行計劃MySql
- SYBASE執行計劃
- MySQL 執行計劃MySql
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle DB 相關常用sql彙總7【手工繫結sql執行計劃】OracleSQL
- 檢視一個正在執行的sql的執行計劃(explain for connection processlist_id)SQLAI
- Oracle優化案例-從執行計劃定位SQL問題(三)Oracle優化SQL
- TiDB與MySQL的SQL差異及執行計劃簡析TiDBMySql
- 微課sql最佳化(9)、如何獲取執行計劃SQL
- 微課sql最佳化(11) 、如何檢視執行計劃SQL
- 利用SSIS在SQL Azure中執行計劃任務(下)KCSQL
- 利用SSIS在SQL Azure中執行計劃任務(上)DJSQL
- MySQL執行計劃解析MySql