使用outline固定sql执行计划
来源:互联网 发布:js中select标签 编辑:程序博客网 时间:2024/05/16 17:33
转http://blog.csdn.net/aaaaaaaa2000/article/details/9086111
SQL> set linesize 1000
SQL> col index_name for a40
SQL> col COLUMN_NAME for a20
SQL> select index_name,COLUMN_NAME from dba_ind_columns where table_name='TEST_PART' and table_owner='TEST_DBA';
INDEX_NAME COLUMN_NAME
---------------------------------------- --------------------
IND_PART_DT DT
SQL>
此表由索引,可以测试走做引以及走全表扫描
SQL> set autotrace on explain
SQL> set pagesize 300
SQL> set linesize 300
SQL> var name1 varchar2(10);
SQL> var name2 varchar2(100);
SQL> var name1 varchar2(100);
SQL> exec :name1 :='2012-09-21 8:05:55';
PL/SQL procedure successfully completed.
SQL> exec :name2 :='2012-09-21 8:06:05';
PL/SQL procedure successfully completed.
SQL> select * from TEST_DBA.TEST_PART where dt>=to_date(:name1,'yyyy-mm-dd hh24:mi:ss') and
2 dt<to_date(:name2,'yyyy-mm-dd hh24:mi:ss') ;
ID STR DT
---------- ---------- ---------
29155 aaaaaaaaa 21-SEP-12
29156 aaaaaaaaa 21-SEP-12
29157 aaaaaaaaa 21-SEP-12
29158 aaaaaaaaa 21-SEP-12
29159 aaaaaaaaa 21-SEP-12
29160 aaaaaaaaa 21-SEP-12
29161 aaaaaaaaa 21-SEP-12
29162 aaaaaaaaa 21-SEP-12
29163 aaaaaaaaa 21-SEP-12
29164 aaaaaaaaa 21-SEP-12
10 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 2229598636
-------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 250 | 5750 | 5 (0)| 00:00:01 | | |
|* 1 | FILTER | | | | | | | |
| 2 | PARTITION RANGE ITERATOR | | 250 | 5750 | 5 (0)| 00:00:01 | KEY | KEY |
| 3 | TABLE ACCESS BY LOCAL INDEX ROWID| TEST_PART | 250 | 5750 | 5 (0)| 00:00:01 | KEY | KEY |
|* 4 | INDEX RANGE SCAN | IND_PART_DT | 450 | | 3 (0)| 00:00:01 | KEY | KEY |
-------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(TO_DATE(:NAME1,'yyyy-mm-dd hh24:mi:ss')<TO_DATE(:NAME2,'yyyy-mm-dd hh24:mi:ss'))
4 - access("DT">=TO_DATE(:NAME1,'yyyy-mm-dd hh24:mi:ss') AND "DT"<TO_DATE(:NAME2,'yyyy-mm-dd
hh24:mi:ss'))
以上生成了索引的执行sql
SQL> select /*+FULL(TEST_PART)*/ * from TEST_DBA.TEST_PART where dt>=to_date(:name1,'yyyy-mm-dd hh24:mi:ss') and
2 dt<to_date(:name2,'yyyy-mm-dd hh24:mi:ss') ;
ID STR DT
---------- ---------- ---------
29155 aaaaaaaaa 21-SEP-12
29156 aaaaaaaaa 21-SEP-12
29157 aaaaaaaaa 21-SEP-12
29158 aaaaaaaaa 21-SEP-12
29159 aaaaaaaaa 21-SEP-12
29160 aaaaaaaaa 21-SEP-12
29161 aaaaaaaaa 21-SEP-12
29162 aaaaaaaaa 21-SEP-12
29163 aaaaaaaaa 21-SEP-12
29164 aaaaaaaaa 21-SEP-12
10 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1956636844
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 250 | 5750 | 161 (3)| 00:00:02 | | |
|* 1 | FILTER | | | | | | | |
| 2 | PARTITION RANGE ITERATOR| | 250 | 5750 | 161 (3)| 00:00:02 | KEY | KEY |
|* 3 | TABLE ACCESS FULL | TEST_PART | 250 | 5750 | 161 (3)| 00:00:02 | KEY | KEY |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(TO_DATE(:NAME1,'yyyy-mm-dd hh24:mi:ss')<TO_DATE(:NAME2,'yyyy-mm-dd hh24:mi:ss'))
3 - filter("DT">=TO_DATE(:NAME1,'yyyy-mm-dd hh24:mi:ss') AND
"DT"<TO_DATE(:NAME2,'yyyy-mm-dd hh24:mi:ss'))
以上是走全表扫描的执行计划
现在要将该语句全部变为走全表扫描,也就是用全表扫描的执行计划来绑定该语句
SQL> select sql_id from v$sql_plan where plan_hash_value=2229598636;
SQL_ID
-------------
day4zwzuhxjnd
day4zwzuhxjnd
day4zwzuhxjnd
day4zwzuhxjnd
day4zwzuhxjnd
SQL> select sql_id from v$sql_plan where plan_hash_value=1956636844;
SQL_ID
-------------
fzs1wktabj9ny
fzs1wktabj9ny
fzs1wktabj9ny
fzs1wktabj9ny
进行绑定
SQL> declare
2 m_clob clob;
3 begin
4 select sql_fulltext
5 into m_clob
6 from v$sql
7 where sql_id = 'day4zwzuhxjnd'
8 and child_number = 0;
9 dbms_output.put_line(m_clob);
10 dbms_output.put_line(dbms_spm.load_plans_from_cursor_cache(
11 sql_id => 'fzs1wktabj9ny',
12 plan_hash_value => 1956636844,
13 sql_text => m_clob,
14 fixed => 'YES',
15 enabled => 'YES'));
16 end;
17 /
PL/SQL procedure successfully completed.
验证
SQL> select * from TEST_DBA.TEST_PART where dt>=to_date(:name1,'yyyy-mm-dd hh24:mi:ss') and
2 dt<to_date(:name2,'yyyy-mm-dd hh24:mi:ss') ;
ID STR DT
---------- ---------- ---------
29155 aaaaaaaaa 21-SEP-12
29156 aaaaaaaaa 21-SEP-12
29157 aaaaaaaaa 21-SEP-12
29158 aaaaaaaaa 21-SEP-12
29159 aaaaaaaaa 21-SEP-12
29160 aaaaaaaaa 21-SEP-12
29161 aaaaaaaaa 21-SEP-12
29162 aaaaaaaaa 21-SEP-12
29163 aaaaaaaaa 21-SEP-12
29164 aaaaaaaaa 21-SEP-12
10 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1956636844
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 250 | 5750 | 161 (3)| 00:00:02 | | |
|* 1 | FILTER | | | | | | | |
| 2 | PARTITION RANGE ITERATOR| | 250 | 5750 | 161 (3)| 00:00:02 | KEY | KEY |
|* 3 | TABLE ACCESS FULL | TEST_PART | 250 | 5750 | 161 (3)| 00:00:02 | KEY | KEY |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter(TO_DATE(:NAME1,'yyyy-mm-dd hh24:mi:ss')<TO_DATE(:NAME2,'yyyy-mm-dd hh24:mi:ss'))
3 - filter("DT">=TO_DATE(:NAME1,'yyyy-mm-dd hh24:mi:ss') AND
"DT"<TO_DATE(:NAME2,'yyyy-mm-dd hh24:mi:ss'))
Note
-----
- SQL plan baseline "SQL_PLAN_c28fvkn3sbtbg70e51298" used for this statement
SQL>
查看生成的sql baseline信息
SQL> select signature,sql_handle,plan_name,origin,enabled,accepted,fixed,autopurge
2 from dba_sql_plan_baselines where sql_text like '%select * from TEST_DBA.TEST_PART%';
SIGNATURE SQL_HANDLE PLAN_NAME ORIGIN ENA ACC FIX AUT
---------- ------------------------------ ------------------------------ -------------- --- --- --- ---
1.3917E+19 SQL_c121db950785e56f SQL_PLAN_c28fvkn3sbtbg70e51298 MANUAL-LOAD YES YES YES YES
SQL>
如果不想要这个绑定计划了,则可以删除它
declare
l_pls number;
begin
l_pls := DBMS_SPM.DROP_SQL_PLAN_BASELINE(
sql_handle => 'SQL_c121db950785e56f',
plan_name => 'SQL_PLAN_c28fvkn3sbtbg70e51298'
);
end;
- 使用outline固定sql执行计划
- 使用outline固定执行计划
- 利用outline固定执行计划
- 使用outline稳固sql执行计划
- 固定执行计划--通过OUTLINE实现
- 使用OUTLINE调整执行计划
- outline执行计划稳定使用
- 使用spm固定sql执行计划
- 使用oracle sql profile固定执行计划
- 阿里巴巴数据库操作手册-20-固定执行计划-outline
- 使用SQL Profile及SQL Tuning Advisor固定执行计划
- ORACLE使用STORED OUTLINE固化执行计划--私有和公有
- ORACLE使用STORED OUTLINE固化执行计划--CURSOR_SHARING
- SQL BASELINE修改固定执行计划
- 固定执行计划--通过 SQL profile实现
- SQL PROFILE修改固定执行计划
- SQL PROFILE修改固定执行计划
- SQL BASELINE修改固定执行计划
- 致加西亚的信
- 理解__getattr__和__getattribute
- UILabel自适应
- 操作分布式文件之八:如何批量并行读写远程文件和事务补偿处理
- Zeroc Ice 发布订阅者之demo Icestorm之clock
- 使用outline固定sql执行计划
- mysql windows 安装与使用
- 9.2链表(六)——给定一个有环链表,实现一个算法返回环路的开头结点
- hdu 1969 &&nyoj 1193 Pie【二分法】
- 108.Convert Sorted Array to Binary Search Tree (将有序数组转化成二叉排序树)
- 203Remove Linked List Elements
- HDU-1754 I Hate It
- protobuf使用
- python正则表达式函数match()和search()的区别