干预oracle执行计划实验

干预oracle执行计划实验
OS: CentOS7.7 x86-64
DB: 11.2.0.4
FM: single + FS

  1. 环境准备
    删除snapshot:
    variable dbid number;
    variable min1 number;
    variable max1 number;
    begin
    select dbid into :dbid from v$database;
    select min(snap_id) into :min1 from dba_hist_snapshot;
    select max(snap_id) into :max1 from dba_hist_snapshot;
    dbms_workload_repository.drop_snapshot_range(low_snap_id=>:min1,high_snap_id=>:max1 + 1,dbid=>:dbid);
    end;
    /
    select min(snap_id),max(snap_id) from dba_hist_snapshot;

删除执行计划(sys用户):
删除shared_pool中的执行计划:
col sql_text for a64;
select address, hash_value,sql_text from v$sqlarea
where sql_id=‘60ffan48x220x’;
ADDRESS HASH_VALUE SQL_TEXT


00000000799E6448 298911773 select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
exec dbms_shared_pool.purge(‘00000000799E6448,298911773’,‘C’);
删除数据字典中的执行计划:
truncate table wrh s q l p l a n ; t r u n c a t e t a b l e w r h _sql_plan; truncate table wrh sqlplan;truncatetablewrh_sqltext;
truncate table wrh$_sqlstat;
select distinct sql_id,plan_hash_value,
to_char(timestamp, ‘yyyymmdd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
order by timestamp;

测试数据:
drop table t4 purge;
create table t4(c1 number,c2 number,c3 varchar2(20));
begin
for i in 1 … 50000 loop
insert into t4 values(i,i,‘Manstein.Tang’);
if mod(i,10)=0 then
commit;
end if;
end loop;
end;
/

  1. 当statistics_level = typical时
    show parameter optimizer_mode;
    NAME TYPE VALUE

optimizer_mode string ALL_ROWS
alter system set statistics_level = typical;
show parameter statistics_level
NAME TYPE VALUE


statistics_level string TYPICAL

全表扫描时(如dba_hist_sql_plan视图无值则执行多次):
execute dbms_workload_repository.create_snapshot(‘ALL’);
var i number;
var j number;
var k varchar2(10);
exec :i := 1;
exec :j := 1;
exec :k := ‘A’;
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 2560505625

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 68 (100)| |
|* 1 | TABLE ACCESS FULL| T4 | 3 | 114 | 68 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - filter((“C3”=:K AND “C1”>=:I AND “C2”>=:J))
Note

  • dynamic sampling used for this statement (level=2)
    22 rows selected.

execute dbms_workload_repository.create_snapshot(‘ALL’);
select distinct sql_id,plan_hash_value,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
order by timestamp;
SQL_ID PLAN_HASH_VALUE TIMESTAMP


60ffan48x220x 2560505625 2020-11-21 12:07:51

col options for a15
col operation for a20
col object_name for a20
select sql_id,plan_hash_value,id,operation,
options,object_name,depth,cost,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
and plan_hash_value in (2560505625)
order by timestamp,id;
SQL_ID PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME DEPTH COST TIMESTAMP


60ffan48x220x 2560505625 0 SELECT STATEMENT 0 68 2020-11-21 12:07:51
60ffan48x220x 2560505625 1 TABLE ACCESS FULL T4 1 68 2020-11-21 12:07:51

c1列创建索引时:
create index idx_t4_c1 on t4(c1);
var i number;
var j number;
var k varchar2(10);
exec :i := 499990;
exec :j := 499990;
exec :k := ‘A’;
execute dbms_workload_repository.create_snapshot(‘ALL’);
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 2285563422

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 3 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID| T4 | 3 | 114 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_T4_C1 | 3 | | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - filter((“C3”=:K AND “C2”>=:J))
2 - access(“C1”>=:I)
Note

  • dynamic sampling used for this statement (level=2)
    24 rows selected.

execute dbms_workload_repository.create_snapshot(‘ALL’);
select distinct sql_id,plan_hash_value,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
order by timestamp;
SQL_ID PLAN_HASH_VALUE TIMESTAMP


60ffan48x220x 2560505625 2020-11-21 12:07:51
60ffan48x220x 2285563422 2020-11-21 12:10:44

col options for a15
col operation for a20
col object_name for a20
select sql_id,plan_hash_value,id,operation,
options,object_name,depth,cost,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
and plan_hash_value in (2560505625,2285563422)
order by timestamp,id;
SQL_ID PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME DEPTH COST TIMESTAMP


60ffan48x220x 2560505625 0 SELECT STATEMENT 0 68 2020-11-21 12:07:51
60ffan48x220x 2560505625 1 TABLE ACCESS FULL T4 1 68 2020-11-21 12:07:51
60ffan48x220x 2285563422 0 SELECT STATEMENT 0 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 1 TABLE ACCESS BY INDEX ROWID T4 1 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 2 INDEX RANGE SCAN IDX_T4_C1 2 2 2020-11-21 12:10:44

C1/C2列创建索引时:
create index idx_t4_c1c2 on t4(c1,c2);
var i number;
var j number;
var k varchar2(10);
exec :i := 1;
exec :j := 1;
exec :k := ‘A’;
execute dbms_workload_repository.create_snapshot(‘ALL’);
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 2560505625

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 68 (100)| |
|* 1 | TABLE ACCESS FULL| T4 | 3 | 114 | 68 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - filter((“C3”=:K AND “C1”>=:I AND “C2”>=:J))
Note

  • dynamic sampling used for this statement (level=2)
    22 rows selected.

C1/C2/C3列创建索引时:
create index idx_t4_c1c2c3 on t4(c1,c2,c3);
var i number;
var j number;
var k varchar2(10);
exec :i := 300000;
exec :j := 300000;
exec :k := ‘A’;
execute dbms_workload_repository.create_snapshot(‘ALL’);
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 222352819

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | INDEX RANGE SCAN| IDX_T4_C1C2C3 | 3 | 114 | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - access(“C1”>=:I AND “C2”>=:J AND “C3”=:K AND “C1” IS NOT NULL)
filter((“C3”=:K AND “C2”>=:J))
Note

  • dynamic sampling used for this statement (level=2)
    23 rows selected.

execute dbms_workload_repository.create_snapshot(‘ALL’);
select distinct sql_id,plan_hash_value,
to_char(timestamp,‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
order by timestamp;
SQL_ID PLAN_HASH_VALUE TIMESTAMP


60ffan48x220x 2560505625 2020-11-21 12:07:51
60ffan48x220x 2285563422 2020-11-21 12:10:44
60ffan48x220x 222352819 2020-11-21 12:13:24

col options for a15
col operation for a20
col object_name for a20
select sql_id,plan_hash_value,id,operation,
options,object_name,depth,cost,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
and plan_hash_value in (2560505625,2285563422,222352819)
order by timestamp,id;
SQL_ID PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME DEPTH COST TIMESTAMP


60ffan48x220x 2560505625 0 SELECT STATEMENT 0 68 2020-11-21 12:07:51
60ffan48x220x 2560505625 1 TABLE ACCESS FULL T4 1 68 2020-11-21 12:07:51
60ffan48x220x 2285563422 0 SELECT STATEMENT 0 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 1 TABLE ACCESS BY INDEX ROWID T4 1 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 2 INDEX RANGE SCAN IDX_T4_C1 2 2 2020-11-21 12:10:44
60ffan48x220x 222352819 0 SELECT STATEMENT 0 2 2020-11-21 12:13:24
60ffan48x220x 222352819 1 INDEX RANGE SCAN IDX_T4_C1C2C3 1 2 2020-11-21 12:13:24
7 rows selected.

统计信息改变时:
col owner for a15
col table_name for a20
col index_type for a10
select owner,table_name,index_type,clustering_factor from dba_indexes where owner=‘YVH’ and index_name=‘IDX_T4_C1C2C3’;
OWNER TABLE_NAME INDEX_TYPE CLUSTERING_FACTOR


YVH T4 NORMAL 198
exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
begin
DBMS_STATS.SET_INDEX_STATS (
ownname => ‘YVH’,
indname => ‘IDX_T4_C1C2C3’,
numrows => 1000000000,
numlblks => 10000000,
numdist => 1000,
avglblk => 100,
avgdblk => 100,
indlevel => 100,
clstfct => 100,
cachehit => 100,
cachedblk => 100,
guessq => 100,
force => true,
no_invalidate => false
);
end;
/
select owner,table_name,index_type,clustering_factor from dba_indexes where owner=‘YVH’ and index_name=‘IDX_T4_C1C2C3’;

var i number;
var j number;
var k varchar2(10);
exec :i := 300000;
exec :j := 300000;
exec :k := ‘A’;
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 1840
Session ID: 27 Serial number: 9
出现ORA-03113错误,报错原因是"indlevel => 100"导致

conn yvh/yvh
exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
exec dbms_stats.gather_table_stats(‘yvh’, ‘t4’,cascade=>true);
begin
DBMS_STATS.SET_INDEX_STATS (
ownname => ‘YVH’,
indname => ‘IDX_T4_C1C2C3’,
numrows => 10000,
numlblks => 100,
numdist => 10,
avglblk => 100,
avgdblk => 10,
indlevel => 10,
clstfct => 10,
cachehit => 10,
cachedblk => 10,
guessq => 10,
force => true,
no_invalidate => false
);
end;
/
var i number;
var j number;
var k varchar2(10);
exec :i := 300000;
exec :j := 300000;
exec :k := ‘A’;
execute dbms_workload_repository.create_snapshot(‘ALL’);
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 574965781

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 3 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID| T4 | 1 | 24 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_T4_C1C2 | 1 | | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - filter(“C3”=:K)
2 - access(“C1”>=:I AND “C2”>=:J AND “C1” IS NOT NULL)
filter(“C2”>=:J)
21 rows selected.

execute dbms_workload_repository.create_snapshot(‘ALL’);
select distinct sql_id,plan_hash_value,
to_char(timestamp,‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
order by timestamp;
SQL_ID PLAN_HASH_VALUE TIMESTAMP


60ffan48x220x 2560505625 2020-11-21 12:07:51
60ffan48x220x 2285563422 2020-11-21 12:10:44
60ffan48x220x 222352819 2020-11-21 12:13:24
60ffan48x220x 574965781 2020-11-21 12:18:11

col options for a15
col operation for a20
col object_name for a20
select sql_id,plan_hash_value,id,operation,
options,object_name,depth,cost,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
and plan_hash_value in (2560505625,2285563422,222352819,574965781)
order by timestamp,id;
SQL_ID PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME DEPTH COST TIMESTAMP


60ffan48x220x 2560505625 0 SELECT STATEMENT 0 68 2020-11-21 12:07:51
60ffan48x220x 2560505625 1 TABLE ACCESS FULL T4 1 68 2020-11-21 12:07:51
60ffan48x220x 2285563422 0 SELECT STATEMENT 0 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 1 TABLE ACCESS BY INDEX ROWID T4 1 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 2 INDEX RANGE SCAN IDX_T4_C1 2 2 2020-11-21 12:10:44
60ffan48x220x 222352819 0 SELECT STATEMENT 0 2 2020-11-21 12:13:24
60ffan48x220x 222352819 1 INDEX RANGE SCAN IDX_T4_C1C2C3 1 2 2020-11-21 12:13:24
60ffan48x220x 574965781 0 SELECT STATEMENT 0 3 2020-11-21 12:18:11
60ffan48x220x 574965781 1 TABLE ACCESS BY INDEX ROWID T4 1 3 2020-11-21 12:18:11
60ffan48x220x 574965781 2 INDEX RANGE SCAN IDX_T4_C1C2 2 2 2020-11-21 12:18:11
10 rows selected.

  1. 当statistics_level = all时:
    删除统计信息:
    exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
    exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
    exec dbms_stats.gather_table_stats(‘yvh’, ‘t4’,cascade=>true);
    alter system set statistics_level=all;
    var i number;
    var j number;
    var k varchar2(10);
    exec :i := 300000000;
    exec :j := 300000000
    exec :k := ‘B’;
    execute dbms_workload_repository.create_snapshot(‘ALL’);
    select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
    select * from table(dbms_xplan.display_cursor());
    PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 222352819

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | INDEX RANGE SCAN| IDX_T4_C1C2C3 | 1 | 24 | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - access(“C1”>=:I AND “C2”>=:J AND “C3”=:K AND “C1” IS NOT NULL)
filter((“C3”=:K AND “C2”>=:J))
19 rows selected.

exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
exec dbms_stats.gather_table_stats(‘yvh’, ‘t4’,cascade=>true);
begin
DBMS_STATS.SET_INDEX_STATS (
ownname => ‘YVH’,
indname => ‘IDX_T4_C1C2C3’,
numrows => 10000,
numlblks => 100,
numdist => 10,
avglblk => 100,
avgdblk => 10,
indlevel => 10,
clstfct => 10,
cachehit => 10,
cachedblk => 10,
guessq => 10,
force => true,
no_invalidate => false
);
end;
/
var i number;
var j number;
var k varchar2(10);
exec :i := 300000000;
exec :j := 300000000
exec :k := ‘B’;
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 574965781

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 3 (100)| |
|* 1 | TABLE ACCESS BY INDEX ROWID| T4 | 1 | 24 | 3 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IDX_T4_C1C2 | 1 | | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - filter(“C3”=:K)
2 - access(“C1”>=:I AND “C2”>=:J AND “C1” IS NOT NULL)
filter(“C2”>=:J)
21 rows selected.

  1. 当optimizer_mode=first_rows时:
    exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
    exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
    exec dbms_stats.gather_table_stats(‘yvh’, ‘t4’,cascade=>true);
    alter system set statistics_level=all;
    alter session set optimizer_mode =first_rows;
    var i number;
    var j number;
    var k varchar2(10);
    exec :i := 300000000;
    exec :j := 300000000
    exec :k := ‘B’;
    execute dbms_workload_repository.create_snapshot(‘ALL’);
    select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
    select * from table(dbms_xplan.display_cursor());
    PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 0

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 222352819

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | INDEX RANGE SCAN| IDX_T4_C1C2C3 | 1 | 24 | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - access(“C1”>=:I AND “C2”>=:J AND “C3”=:K AND “C1” IS NOT NULL)
filter((“C3”=:K AND “C2”>=:J))
19 rows selected.

conn yvh/yvh
exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
exec dbms_stats.gather_table_stats(‘yvh’, ‘t4’,cascade=>true);
begin
DBMS_STATS.SET_INDEX_STATS (
ownname => ‘YVH’,
indname => ‘IDX_T4_C1C2’,
numrows => 10000000,
numlblks => 10000000,
numdist => 1000,
avglblk => 100,
avgdblk => 100,
indlevel => 100,
clstfct => 100,
cachehit => 100,
cachedblk => 100,
guessq => 100,
force => true,
no_invalidate => false
);
end;
/
var i number;
var j number;
var k varchar2(10);
exec :i := 300000000;
exec :j := 300000000
exec :k := ‘B’;
execute dbms_workload_repository.create_snapshot(‘ALL’);
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2031
Session ID: 44 Serial number: 27
出现ORA-03113错误,报错原因是"indlevel => 100"导致

conn yvh/yvh
exec dbms_stats.delete_table_stats(‘yvh’, ‘t4’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2’);
exec dbms_stats.delete_index_stats(‘yvh’, ‘idx_t4_c1c2c3’);
exec dbms_stats.gather_table_stats(‘yvh’, ‘t4’,cascade=>true);
begin
DBMS_STATS.SET_INDEX_STATS (
ownname => ‘YVH’,
indname => ‘IDX_T4_C1C2C3’,
numrows => 1,
numlblks => 1,
numdist => 1,
avglblk => 1,
avgdblk => 1,
indlevel => 1,
clstfct => 1,
cachehit => 1,
cachedblk => 1,
guessq => 1,
force => true,
no_invalidate => false
);
end;
/
var i number;
var j number;
var k varchar2(10);
exec :i := 300000000;
exec :j := 300000000
exec :k := ‘B’;
execute dbms_workload_repository.create_snapshot(‘ALL’);
select * from t4 where c1 >= :i and c2 >= :j and c3 = :k;
select * from table(dbms_xplan.display_cursor());
PLAN_TABLE_OUTPUT

SQL_ID 60ffan48x220x, child number 1

select * from t4 where c1 >= :i and c2 >= :j and c3 = :k
Plan hash value: 4202443879

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

| 0 | SELECT STATEMENT | | | | 2 (100)| |
|* 1 | INDEX FAST FULL SCAN| IDX_T4_C1C2C3 | 1 | 24 | 2 (0)| 00:00:01 |

Predicate Information (identified by operation id):

1 - filter((“C1”>=:I AND “C2”>=:J AND “C3”=:K))
18 rows selected.
注意child number 1

execute dbms_workload_repository.create_snapshot(‘ALL’);
select distinct sql_id,plan_hash_value,
to_char(timestamp,‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
order by timestamp;
SQL_ID PLAN_HASH_VALUE TIMESTAMP


60ffan48x220x 2560505625 2020-11-21 12:07:51
60ffan48x220x 2285563422 2020-11-21 12:10:44
60ffan48x220x 222352819 2020-11-21 12:13:24
60ffan48x220x 574965781 2020-11-21 12:18:11
60ffan48x220x 4202443879 2020-11-21 12:24:52

col options for a15
col operation for a20
col object_name for a20
select sql_id,plan_hash_value,id,operation,
options,object_name,depth,cost,
to_char(timestamp, ‘yyyy-mm-dd hh24:mi:ss’) timestamp
from dba_hist_sql_plan
where sql_id = ‘60ffan48x220x’
and plan_hash_value in (2560505625,2285563422,222352819,574965781,4202443879)
order by timestamp,id;
SQL_ID PLAN_HASH_VALUE ID OPERATION OPTIONS OBJECT_NAME DEPTH COST TIMESTAMP


60ffan48x220x 2560505625 0 SELECT STATEMENT 0 68 2020-11-21 12:07:51
60ffan48x220x 2560505625 1 TABLE ACCESS FULL T4 1 68 2020-11-21 12:07:51
60ffan48x220x 2285563422 0 SELECT STATEMENT 0 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 1 TABLE ACCESS BY INDEX ROWID T4 1 3 2020-11-21 12:10:44
60ffan48x220x 2285563422 2 INDEX RANGE SCAN IDX_T4_C1 2 2 2020-11-21 12:10:44
60ffan48x220x 222352819 0 SELECT STATEMENT 0 2 2020-11-21 12:13:24
60ffan48x220x 222352819 1 INDEX RANGE SCAN IDX_T4_C1C2C3 1 2 2020-11-21 12:13:24
60ffan48x220x 574965781 0 SELECT STATEMENT 0 3 2020-11-21 12:18:11
60ffan48x220x 574965781 1 TABLE ACCESS BY INDEX ROWID T4 1 3 2020-11-21 12:18:11
60ffan48x220x 574965781 2 INDEX RANGE SCAN IDX_T4_C1C2 2 2 2020-11-21 12:18:11
60ffan48x220x 4202443879 0 SELECT STATEMENT 0 2 2020-11-21 12:24:52
60ffan48x220x 4202443879 1 INDEX FAST FULL SCAN IDX_T4_C1C2C3 1 2 2020-11-21 12:24:52
12 rows selected.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值