用sql profile來固定執行計劃
今天一個SQL用BASELINE沒搞定,BASELINE沒起作用,原因還在找。
忽然想起了SQL PROFILE,就試了一下,嘿嘿,果然還不錯,起作用了。
以下是個用法示例:
根據DBA_OBJECTS建立個表,OBJECT_ID列上建立索引。
按照OBJECT_ID去查詢,預設的走了索引,我們看看如何讓他透過SQL PROFILE去走全表掃描。
declare
v_hints sys.sqlprof_attr;
begin
v_hints := sys.sqlprof_attr('full(wxh_tbd@sel$1)');----------HINT部分
dbms_sqltune.import_sql_profile('select count(*) from wxh_tbd where object_id=:a',----------SQL語句部分
v_hints,
'SQLPROFILE_NAME3',--------------------------------PROFILE 的名字
force_match => true);
end;
/
select count(*) from wxh_tbd where object_id=:a;
Execution Plan
----------------------------------------------------------
Plan hash value: 853361775
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 144 (3)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
|* 2 | TABLE ACCESS FULL| WXH_TBD | 198 | 2574 | 144 (3)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("OBJECT_ID"=TO_NUMBER(:A))
Note
-----
- SQL profile "SQLPROFILE_NAME3" used for this statement-----------------------我們看到SQL PROFILE 起作用了
SQL PROFILE的好處是,你的SQL語句不區分大小寫,回車之類的,只要文字一樣就OK,這個有點比較贊。
刪除SQL PROFILE
透過select * from dba_sql_profiles a;查詢出PROFILE 的NAME,
然後
exec dbms_sqltune.drop_sql_profile('SYS_SQLPROF_012ed61fe9bd0000'); 來刪除
不過用SQL PROFILE,寫HINT的時候,我測試的情況是,必須寫上查詢塊的名稱,這在一定程度上,要求對查詢塊比較熟悉。
忽然想起了SQL PROFILE,就試了一下,嘿嘿,果然還不錯,起作用了。
以下是個用法示例:
根據DBA_OBJECTS建立個表,OBJECT_ID列上建立索引。
按照OBJECT_ID去查詢,預設的走了索引,我們看看如何讓他透過SQL PROFILE去走全表掃描。
declare
v_hints sys.sqlprof_attr;
begin
v_hints := sys.sqlprof_attr('full(wxh_tbd@sel$1)');----------HINT部分
dbms_sqltune.import_sql_profile('select count(*) from wxh_tbd where object_id=:a',----------SQL語句部分
v_hints,
'SQLPROFILE_NAME3',--------------------------------PROFILE 的名字
force_match => true);
end;
/
select count(*) from wxh_tbd where object_id=:a;
Execution Plan
----------------------------------------------------------
Plan hash value: 853361775
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 144 (3)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 13 | | |
|* 2 | TABLE ACCESS FULL| WXH_TBD | 198 | 2574 | 144 (3)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("OBJECT_ID"=TO_NUMBER(:A))
Note
-----
- SQL profile "SQLPROFILE_NAME3" used for this statement-----------------------我們看到SQL PROFILE 起作用了
SQL PROFILE的好處是,你的SQL語句不區分大小寫,回車之類的,只要文字一樣就OK,這個有點比較贊。
刪除SQL PROFILE
透過select * from dba_sql_profiles a;查詢出PROFILE 的NAME,
然後
exec dbms_sqltune.drop_sql_profile('SYS_SQLPROF_012ed61fe9bd0000'); 來刪除
不過用SQL PROFILE,寫HINT的時候,我測試的情況是,必須寫上查詢塊的名稱,這在一定程度上,要求對查詢塊比較熟悉。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-697116/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQL PROFILE修改固定執行計劃SQL
- 使用sql profile固定執行計劃SQL
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- 使用coe_xfr_sql_profile固定執行計劃SQL
- .Oracle固定執行計劃之SQL PROFILE概要檔案OracleSQL
- 使用SQL Profile及SQL Tuning Advisor固定執行計劃SQL
- 控制執行計劃之-SQL Profile(一)SQL
- zt_sql baseline_sql profile_sql outline修改固定執行計劃SQL
- Oracle優化案例-coe_xfr_sql_profile固定執行計劃與刪除profile(二十五)Oracle優化SQL
- baseline固定SQL執行計劃SQL
- Oracle手動固定SQL執行計劃OracleSQL
- SQL BASELINE修改固定執行計劃SQL
- 使用SQL PROFILE 給出合理的執行計劃SQL
- oracle 固定執行計劃Oracle
- Oracle優化案例-view merge與coe_load_sql_profile固定執行計劃(十五)Oracle優化ViewSQL
- 用outline修改固定執行計劃
- 利用coe_xfr_sql_profile 改變執行計劃SQL
- oracle固定執行計劃--sqlprofileOracleSQL
- oracle sqlprofile 固定執行計劃,並遷移執行計劃OracleSQL
- Oracle SQL_Profile手動生成及繫結sql執行計劃OracleSQL
- 【SPM】Oracle如何固定執行計劃Oracle
- sql 執行計劃SQL
- 使用OUTLINE固定執行計劃
- 使用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
- 用DBMS_XPLAN來展示執行計劃
- oracle使用outline固定執行計劃事例Oracle
- 獲取SQL執行計劃SQL
- SQL 執行計劃案例1SQL
- 剖析SQL Server執行計劃SQLServer
- 檢視sql執行計劃SQL