干预oracle执行计划实验
OS: CentOS7.7 x86-64
DB: 11.2.0.4
FM: single + FS
- 环境准备
删除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;
/
- 当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.
- 当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.
- 当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.