用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 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
- SQL執行計劃異常引起的效能問題SQL
- SQL執行計劃異常 引起的效能問題SQL
- SQLServer統計監控SQL執行計劃突變的方法SQLServer
- 分析執行計劃優化SQLORACLE的執行計劃(轉)優化SQLOracle
- 透過空間佔用和執行計劃瞭解SQL Server的行儲存索引SQLServer索引
- MySql中執行計劃如何來的——Optimizer TraceMySql
- 獲取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