2. Waits Covered in this Section
1. db file sequential read
2. db file scattered read Buffer Cache I/O
3. db file parallel read
4. read by other session
5. direct path read
6. direct path write
7. direct path read temp
8. direct path write temp PGA I/O
9. direct path write (lob)
10. Local write wait
11. data file init write Special Cases
Copyright 2006 Kyle Hailey
4. Standard Table/Index IO
1. db file sequential read
Single block read
1. db file scattered read
Multi block read
1. db file parallel read
Non-contiguous multi block read
1. read by other session
Wait for another session to do the io
Copyright 2006 Kyle Hailey
5. db file sequential read
Buffer Cache The top wait
Single Block Read
Data via Index and/or Rowid
Rollback (if expecting FTS => problem)
Select **from emp where empno = 9999;
Select from emp where empno = 9999;
Shadow Index on emp.empno
Process
1) Search Buffer Cache for
the block by rowid
2) Fails Note: “sequential” means
3) Reads of disk A sequence like a
• File rowid
• Block
Copyright 2006 Kyle Hailey
6. db file scattered read
Multi Block Read
Buffer Cache FullTable Scan
Index Fast Full Scans
SQL> select * from emp;
SQL> select * from emp;
Shadow
Process
1) Search Buffer Cache for the
blocks Note: Scattered Means
2) Fails
Blocks are read and
3) Reads off disk
• File scattered throughout
• Block buffer cache
• Multi Block Read Count
db_file_multiblock_read_count
Copyright 2006 Kyle Hailey
7. db file parallel read
Buffer Cache Process issues multiple single block reads in parallel
Documentation says only for recovery
But seems to happen for normal read ops
Async Call – wait for all reads to complete
Examples
Not contiguous multi block read
Index full or range scan
Shadow
Where values in Select **from emp where
Process Select from emp where
Empno in (1,2,3,4,5,6);
Empno in (1,2,3,4,5,6);
1) Search Buffer Cache for
the blocks
2) Fails
3) Reads that block off Disk
Copyright 2006 Kyle Hailey
8. Read by other Session
Buffer Cache
Multiple sessions reading the
same data that requires IO
Ex) two users doing a full table
scan at the same time
S1 S2
1. Block not found in cache
2. Read block from disk
3. Found other session already
reading block from disk
4. Wait for the other session to finish
IO
Copyright 2006 Kyle Hailey
9. IO – Further Investigation
select parameter1, parameter2, parameter3 from v$event_name
NAME P1 P2 P3
read by other session file# block# class#
db file sequential read file# block# blocks
db file scattered read file# block# blocks
db file parallel read files blocks requests
P1 and P2 are file# , block#
We can use P1, P2, P3 from ASH to get more info
Exception:
db file parallel read – p1,p2,p3 not useful
Copyright 2006 Kyle Hailey
10. sequential reads – blocks read
select
event,
ash.p3,
o.object_name objn,
o.object_type otype,
CURRENT_FILE# filen,
CURRENT_BLOCK# blockn,
ash.SQL_ID
from v$active_session_history ash,
all_objects o
where event like 'db file sequential read'
and o.object_id (+)= ash.CURRENT_OBJ#
order by sample_time; P3= # of
blocks
EVENT P3 OBJN OTYPE FILEN BLOCKN SQL_ID
db file sequential read 1 49890 MGMT_METRICS_1HOUR_ INDEX 3 41737
db file sequential read 1 50908 MGMT_DB_SGA_ECM TABLE 3 28489 35at43xqj7bs0
db file sequential read 1 55303 TOTO TABLE 1 60218 7xftj55rvjw9s
Copyright 2006 Kyle Hailey
11. scattered reads – multi blocks read
select
event,
ash.p3,
o.object_name objn,
o.object_type otype,
CURRENT_FILE# filen,
CURRENT_BLOCK# blockn,
ash.SQL_ID
from v$active_session_history ash,
all_objects o
where event like 'db file scattered read'
and o.object_id (+)= ash.CURRENT_OBJ# P3= # of
order by sample_time; blocks
EVENT P3 OBJN OTYPE FILEN BLOCKN SQL_ID
db file scattered read 8 9078 WRH$_SYSMETRIC_HISTO TABLE 3 52363
db file scattered read 5 8781 WRI$_ALERT_HISTORY TABLE 3 2676
db file scattered read 8 57 OBJAUTH$ TABLE 1 33993 3t2mk1prj24hu
Copyright 2006 Kyle Hailey
12. IO by File
select io.cnt,
round(io.cnt/(&v_minutes*60),2) aas,
io.event,
io.p1 p1,
f.tablespace_name
from ( select
count(*) cnt,
substr(event,0,25) event,
ash.p1 p1
from v$active_session_history ash
where ( event like 'db file s%' or event like 'direct%' )
and sample_time > sysdate - &v_minutes/(60*24)
group by
event ,
ash.p1
) io,
dba_data_files f CNT AAS EVENT P1 TABLESPACE
where 1 .00 db file sequential read 1 SYSTEM
f.file_id = io.p1 2 .00 db file sequential read 3 SYSAUX
Order by io.cnt ; 38 .06 db file sequential read 6 SOE
179 .30 db file sequential read 7 SOEINDEX
13. IO by Object
select
count(*) cnt,
CURRENT_OBJ#||' '||o.object_name objn,
o.object_type otype
from v$active_session_history ash,
all_objects o
where ( event like 'db file s%' or event like 'direct%' )
and o.object_id (+)= ash.CURRENT_OBJ#
and sample_time > sysdate - &1/(60*24)
and session_state='WAITING'
group by
CURRENT_OBJ#, o.object_name ,
o.object_type
Order by count(*)
CNT AAS OBJN OTYPE
PARTITION.00
79 52949 ORDER_ITEMS TABLE
97 .00 -1
130 .00 53117 ORD_STATUS_IX INDEX
498 .01 53120 CUST_EMAIL_IX INDEX
512 .01 0
1632 .03 53112 ITEM_ORDER_IX INDEX
14. IO by SQL
select
round(sum(cnt) over ( partition by io.sql_id order by sql_id ) / (&v_minutes*60),2) aas,
io.sql_id,
io.cnt cnt,
100*cnt/sum(cnt) over ( partition by io.sql_id order by sql_id ) pct,
o.object_name obj,
o.subobject_name sub_obj,
o.object_type otype,
substr(io.event,8,10) event,
AAS SQL_ID % OBJ TABLESPACE
io.p1 file#, ----- ------------- --- --------------- ----------
f.tablespace_name tablespace_name,
tbs.contents .18 0yas01u2p9ch4 6 ITEM_PRODUCT_IX SOEINDEX
from
(
6 ORDER_ITEMS_UK SOEINDEX
select 88 ITEM_ORDER_IX SOEINDEX
sql_id,
event,
.32 6v6gm0fd1rgrz 6 WAIT_OBJECTS SYSTEM
count(*) cnt, 94 UNDO UNDOTBS1
count(*) / (&v_minutes*60) aas,
CURRENT_OBJ# ,
ash.p1
from v$active_session_history ash
where ( event like 'db file s%' or event like 'direct%' )
and sample_time > sysdate - &v_minutes/(60*24)
group by
CURRENT_OBJ#,
event,
ash.p1,
sql_id
) io,
dba_data_files f
,all_objects o
, dba_tablespaces tbs
where
f.file_id = io.p1
and o.object_id (+)= io.CURRENT_OBJ#
and tbs.tablespace_name= f.tablespace_name
Order by tcnt, sql_id, cnt
/
15. Missing Object IDs
dba_extents – get object name
select segment_name,
select segment_name,
segment_type
segment_type
from dba_extents
from dba_extents
where file_id = P1
where file_id = P1
and P2 between
and P2 between
block_id and block_id + blocks – 1;
block_id and block_id + blocks – 1;
Dba_extents is notoriously slow
Options
Create a table as select – use table
recreate as object extents change
Catch blocks in x$bh when waits occur
Copyright 2006 Kyle Hailey
16. Copy of dba_extents
Enter value for file: 3
Enter value for block: 6619
OWNER SEGMENT_NAME SEGMENT_TYPE
WMSYS LOG_TAB_PK INDEX
Elapsed: 00:00:41.25
create table myextents as select * from dba_extents
Table created.
Elapsed: 00:01:25.73
CNT OWN SEGMENT_NAME SEGMENT_TYPE
11 SYS SMON_SCN_TO_TIME CLUSTER
993 SYS _SYSSMU7$ TYPE2 UNDO
150 rows selected.
Elapsed: 00:00:01.03
17. IO Solutions
1. Check average read times per file
Should be between 5-20 ms
Data in Statspack under “File IO Stats”
1. Check Cache buffer Hit ratio
Check db_cache_advice 9i and higher
Data in Statspack under “Buffer Pool Advisory”
Want to optimize data caching
1. Tune High IO SQL
Check reads off of UNDO
Copyright 2006 Kyle Hailey
18. Step 1a: Ave Read Time
File IO Stats DB/Inst:labsf03 Snaps: 1-2
File IO Stats DB/Inst:labsf03 Snaps: 1-2
Tablespace
Tablespace Filename
Filename
------------------------ ----------------------------------------------------
------------------------ ----------------------------------------------------
Av
Av MxMx
Av
Av
Av
Av Rd
Rd RdRd Av
Av Av
Av Buffer BufWt
Buffer BufWt
Reads Reads/s (ms) Bkt Blks/Rd
Reads Reads/s (ms) Bkt Blks/Rd Writes Writes/s
Writes Writes/s Waits (ms)
Waits (ms)
---------- ---- ------- ----- --- ------- ------------ -------- ---------- --
---------- ---- ------- ----- --- ------- ------------ -------- ---------- --
SYSTEM
SYSTEM /u01/app/oracle/oradata/labsf03/system01.dbf
/u01/app/oracle/oradata/labsf03/system01.dbf
445
445 15
15 0.4 16
0.4 16 1.0
1.0 1,157
1,157 39
39 2,744
2,744 93.3
93.3
USERS
USERS /u01/app/oracle/oradata/labsf03/users01.dbf
/u01/app/oracle/oradata/labsf03/users01.dbf
223
223 77 0.5 ###
0.5 ### 1.0
1.0 9,725
9,725 324
324 44 100.0
100.0
IO should be under 20ms
Fastest possible is around 7ms
Faster speeds are due to read caching
Copyright 2006 Kyle Hailey
21. Step1 & OEM
ADDM advisory expects I/Os to be under 10ms
Can change the behavior with
exec DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER(
'ADDM',
'DBIO_EXPECTED',
<new value>);
25. IO Configuration Issues
Unix Buffer Cache
Disk Spindles Machine Memory
Raid 5 Unix File Not
Unix File Physical IO SGA
Cache
Physical IO
If average IO read times
are under 7ms them
probably coming from Unix
File Cache
Copyright 2006 Kyle Hailey
26. IO Throughput
One Disk 74G – Few IOPS 92 IO/sec
37 Disks 2G – Many IOPS 1887 IO/sec
Copyright 2006 Kyle Hailey
27. Disk 2Gb vs 70GB
Seagate Seagate
Barracuda 4LP Cheetah 73LP
Capacity 2.16GB 73.4GB
Rotation Speed 7200rpm 10000rpm
Rotational Delay(avg) 4.1ms 3ms
Time to read 32Kb 6ms 3ms
Seek Time (avg) 9.4ms 4.9
Total time for Single I/O 19.5ms 10.9ms
I/O per second 51 92
(conservative)
IOPs/sec per 100GB 2550 126
James Morle http://scaleability.com
Copyright 2006 Kyle Hailey
28. Raid 5
http://www.miracleas.com/BAARF/BAARF2.html
P1 P2
Readers on different
B – Battle disks run without conflict
A – Against
A – Any
P2
R – Raid Writes require two reads
F - Five plus a write – read data,
read parity then write
Reads can conflict on
P1
smaller stripe sizes 32K
or 64K
Copyright 2006 Kyle Hailey
30. Direct I/O WAITS
Direct I/O :
This mechanism lets the client bypass the buffer cache for
I/O intensive operations.
The disk blocks are written into and read from process
private memory.
direct path read :
Parallel Query
direct path write
sqlldr
loading/reading LOBs
parallel DMLs
create table as select
create index
direct path read temp , direct path write temp
Sorting
Copyright 2006 Kyle Hailey
31. Direct IO
Shadow
Process
PGA
Sort Area Buffer Cache
Direct Path
PQO Reads
X
Copyright 2006 Kyle Hailey
32. direct path read
Buffer Cache
Parallel Query
See v$px_session
X select parameter1, parameter2, parameter3
from v$event_name
where name='direct path read';
Shadow PARAMETER1 PARAMETER2 PARAMETER3
Process
file number first dba block cnt
PGA
PQO
_serial_direct_read = true
Copyright 2006 Kyle Hailey
33. Further Investigation ASH
select
select
session_id sid,
session_id sid,
QC_SESSION_ID qsid,
QC_SESSION_ID qsid,
ash.p3,
ash.p3,
CURRENT_OBJ#||' '||o.object_name objn,
CURRENT_OBJ#||' '||o.object_name objn,
o.object_type otype,
o.object_type otype,
CURRENT_FILE# fn,
CURRENT_FILE# fn,
CURRENT_BLOCK# blockn,
CURRENT_BLOCK# blockn,
ash.SQL_ID
ash.SQL_ID
from v$active_session_history ash,
from v$active_session_history ash,
all_objects o
all_objects o
where event like 'direct path read'
where event like 'direct path read'
and o.object_id (+)= ash.CURRENT_OBJ#
and o.object_id (+)= ash.CURRENT_OBJ#
Order by sample_time;
Order by sample_time;
SID QSID P3 OBJN OTYPE FN BLOCKN SQL_ID
SID QSID P3 OBJN OTYPE FN BLOCKN SQL_ID
--- ---- -- ----- ------ -- ------ -------------
--- ---- -- ----- ------ -- ------ -------------
149 152 8 TOTO TABLE
149 152 8 TOTO TABLE 1 194072 4gp8tg0b2s722
1 194072 4gp8tg0b2s722
144 152 8 TOTO TABLE
144 152 8 TOTO TABLE 1 192304 4gp8tg0b2s722
1 192304 4gp8tg0b2s722
60 152 8 TOTO TABLE
60 152 8 TOTO TABLE 1 190592 4gp8tg0b2s722
1 190592 4gp8tg0b2s722
54 152 6 TOTO TABLE
54 152 6 TOTO TABLE 1 201274 4gp8tg0b2s722
1 201274 4gp8tg0b2s722
149 152 8 TOTO TABLE
149 152 8 TOTO TABLE 1 198552 4gp8tg0b2s722
1 198552 4gp8tg0b2s722
Copyright 2006 Kyle Hailey
34. PQO - ASH
select
ash.SQL_ID,
QC_SESSION_ID qsid,
count(*) cnt,
count (distinct session_id) deg,
nvl(o.object_name,to_char(CURRENT_OBJ#)) obj,
o.object_type otype,
decode(session_state, 'WAITING',event,'CPU') event
from v$active_session_history ash,
all_objects o
where o.object_id (+)= ash.CURRENT_OBJ#
and qc_session_id is not null
SQL_ID QSID CNT DEG OBJ OTYPE EVENT
group by qc_session_id, sql_id, o.object_name,
7p3jt75phub2d 144 386 4 WAIT_OBJECTS TABLE PX Deq Credit: send blkd
o.object_type, CURRENT_OBJ#, event, session_stateTABLE
144 4 3 WAIT_OBJECTS PX qref latch
Order by qc_session_id, sql_id144 37 1 WAIT_OBJECTS TABLE db file sequential read
144 3 2 WAIT_OBJECTS TABLE direct path read
144 70 1 WAIT_OBJECTS TABLE CPU
144 21 4 0 PX Deq Credit: send blkd
144 12 4 0 db file sequential read
35. direct path write
Occurs when:
insert /*+ APPEND */
sql*loader direct=y
Create table as select
Loading LOBS
Parallel insert
Buffer Cache
Create index
Shadow select parameter1, parameter2, parameter3
Process from v$event_name
where name='direct path write';
DBWR
PGA PARAMETER1 PARAMETER2 PARAMETER3
file number first dba block cnt
Seems to be a bug on 10g where
direct path write waits are
DATA incorrectly recorded as CPU
Copyright 2006 Kyle Hailey
36. Direct Path Read Temp
Direct Path Write Temp
select parameter1, parameter2, parameter3
Sorting from v$event_name
where name in ('direct path write temp‘,
Write to Temp ‘direct path read temp’);
PARAMETER1 PARAMETER2 PARAMETER3
Read from Temp
file number first dba block cnt
file number first dba block cnt
Shadow
Process
PGA
TEMP DATA
Buffer Cache
Copyright 2006 Kyle Hailey
37. Direct Path Read Temp
Direct Path Write Temp
This event happens when sorting overflows the memory buffers and has to be
written to disk. If it's a problem consider increasing parameter
pga_aggregate_target
The explain plan can give estimated sort size requirements and extended row
source stats in the explain plan can give the actual sort size usage of the SQL
statement
Buffer Cache
Shadow
Process select s.sid, s. process,
s.sql_id, SID SQL_ID SEGTYPE MB TABLESPACE
tmp.segtype, --- ------------- ------- -- ----------
((tmp.blocks*8)/1024) MB, 90 gm5s0vc0vzppc SORT 2 TEMP03
PGA from
tmp.tablespace
105 gm5s0vc0vzppc SORT 2 TEMP03
v$tempseg_usage tmp, 80 gm5s0vc0vzppc SORT 2 TEMP03
v$session s 105 gm5s0vc0vzppc HASH 2 TEMP03
where tmp.session_num=s.serial# 102 gm5s0vc0vzppc SORT 2 TEMP03
and segtype in ('HASH','SORT') 90 gm5s0vc0vzppc HASH 2 TEMP03
order by blocks desc
TEMP DATA
Copyright 2006 Kyle Hailey
38. PGA Aggregate Target
Manual override broken 10.2.0.3 fixed in 11.1.0.7
alter session set workarea_size_policy = manual;
alter session set sort_area_size = 104857600;
Workaround, run command twice
alter session set sort_area_size = 104857600;
alter session set sort_area_size = 104857600;
But doesn’t work for parallel connections that still fall back
on default which is 64K unless otherwise specified
HASH_AREA_SIZE seems unaffected by problem
9i, a single sessions maximum sort area using PGA_AGGREGATE_TARGET was fixed to
100M unless setting
_pga_max_size: Maximum PGA size for a single process
Defaults to 200M
_smm_max_size: Maximum workarea size for one process , defined in KILO BYTES
Defaults Min(0.05*pga_aggregate_target,0.5*_pga_max_size,100M)
In 10.2 max sort size is 10% of PGA_AGGREGATE_TARGET
(100M applies as long as pga_aggregate_target is smaller than 1GB)
example : pga_aggregate_target set to 5GB
_smm_max_size of 500MB (was 100MB )
_pga_max_size of 1000MB (was 200MB).
Copyright 2006 Kyle Hailey
39. Data file init write
When autoextend is set and many extensions are
happening
Can be the root cause of other waits
Enq: TX - contention
Copyright 2006 Kyle Hailey
40. Local Write Wait
Truncating a table
Wait for Data Cache to be cleared of all blocks of
truncated table
Wait by shadow for DBWR
If a problem try
GTT
(reduce db cache size , not usually an option)
Copyright 2006 Kyle Hailey
41. Further Investigation
select * from v$event_name
where name = ‘local write wait'
NAME
NAME P1
P1 P2
P2 P3
P3
local write wait file# block#
local write wait file# block#
select
ash.p1,ash.p2, ash.SQL_ID, count(*)
from v$ash ash
where event='local write wait'
group by P1 P2 SQL_ID COUNT
ash.p1,ash.p2, ash.SQL_ID; 201 2 0q8k9xfmz0k2k 194
201 5 0q8k9xfmz0k2k 34
201 6 0q8k9xfmz0k2k 9
201 4 0q8k9xfmz0k2k 10
Copyright 2006 Kyle Hailey
42. Temporary File #’s
SQL> select file# from v$datafile;
FILE#
1 Wait Temporary File#’s =
2 Db_files + file#
3
4 SQL> show parameters db_files
5 NAME VALUE
6
7 db_files 200
8
SQL> select file# from v$tempfile;
FILE#
2 File# 201 = v$tempfile 1
1
Copyright 2006 Kyle Hailey
43. Local Write Wait:extent allocation
CREATE TEMPORARY TABLESPACE "NEWTEMP"
TEMPFILE '/d3/temp01.dbf' SIZE 100M
AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K;
ALTER DATABASE DEFAULT
TEMPORARY TABLESPACE newtemp;
select a.*, b.*
from dba_objects a, dba_objects b
order by a.owner
Copyright 2006 Kyle Hailey
45. Local Write Wait: Solutions
Truncating a table
Use GTT
( reduce size of buffer cache – unlikely)
Temporary Table Space Allocations
Increase extent size
Copyright 2006 Kyle Hailey
46. Summary I/O
Buffer Cache IO
db file sequential read
db file scattered read
db file parallel read
Tune
I/O’s
should be < 10 ms
Check Buffer Cache Advisory
Tune SQL
Copyright 2006 Kyle Hailey
47. Summary Direct I/O and Other
direct path read
PQO
direct path write
direct path operations
direct path read temp / direct path write temp
sorts
direct path write (lob)
stored NOCACHE
local write wait –
Temp extensions
Truncates
data file init write – data file extension
Copyright 2006 Kyle Hailey
Hinweis der Redaktion
col block_type for a18 col objn for a25 col otype for a15 col event for a25 select event, ash.p3, CURRENT_OBJ#||' '||o.object_name objn, o.object_type otype, CURRENT_FILE# filen, CURRENT_BLOCK# blockn, ash.SQL_ID from v$active_session_history ash, all_objects o where event like 'db file s%' and o.object_id (+)= ash.CURRENT_OBJ# Order by sample_time /
col block_type for a18 col objn for a25 col otype for a15 col event for a25 select event, ash.p3, CURRENT_OBJ#||' '||o.object_name objn, o.object_type otype, CURRENT_FILE# filen, CURRENT_BLOCK# blockn, ash.SQL_ID from v$active_session_history ash, all_objects o where event like 'db file s%' and o.object_id (+)= ash.CURRENT_OBJ# Order by sample_time /
col block_type for a18 col objn for a25 col otype for a15 col event for a25 col blockn for 999999 col p1 for 9999 col aas for 999.99 col f_minutes new_value v_minutes select &minutes f_minutes from dual; select io.cnt, round(io.cnt/(&v_minutes*60),2) aas, io.event, io.p1 p1, f.tablespace_name from ( select count(*) cnt, substr(event,0,25) event, ash.p1 p1 from v$active_session_history ash where ( event like 'db file s%' or event like 'direct%' ) and sample_time > sysdate - &v_minutes/(60*24) group by event , ash.p1 ) io, dba_data_files f where f.file_id = io.p1 Order by io.cnt /
col block_type for a18 col obj for a20 col objn for 999999 col otype for a15 col event for a15 col blockn for 999999 col p1 for 9999 col tablespace_name for a15 col f_minutes new_value v_minutes select &minutes f_minutes from dual; break on sql_id on tcnt select sum(cnt) over ( partition by io.sql_id order by sql_id ) tcnt, io.sql_id, io.cnt cnt, io.aas aas, --io.event event, io.objn objn, io.obj obj, io.p1 p1, f.tablespace_name tablespace_name from ( select sql_id, count(*) cnt, round(count(*)/(&v_minutes*60),2) aas, CURRENT_OBJ# objn, nvl(o.object_name,decode(CURRENT_OBJ#,-1,0,CURRENT_OBJ#)) obj, o.object_type otype, ash.p1 from v$active_session_history ash ,all_objects o where ( event like 'db file s%' or event like 'direct%' ) and o.object_id (+)= ash.CURRENT_OBJ# and sample_time > sysdate - &v_minutes/(60*24) group by CURRENT_OBJ#, o.object_name , o.object_type , ash.p1, sql_id ) io, dba_data_files f where f.file_id = io.p1 Order by tcnt, io.sql_id, io.cnt /
col avgrd_ms format 9,999.9 col avgwr_ms format 9,999.9 col fid for 999 col pr for 9,999 col pw for 9,999 select to_char(begin_time,'yyyy-mm-dd hh24:mi') begin_time, file_id fid, average_read_time *10 avgrd_ms, average_write_time *10 avgwr_ms, physical_reads pr, physical_writes pw from V$FILEMETRIC_HISTORY f order by begin_time /
There is a parameter - DBIO_EXPECTED - that tells ADDM what is an acceptable average single block read in micro seconds. The parameter defaults to 10000 micro seconds and can be changed with: exec DBMS_ADVISOR.SET_DEFAULT_TASK_PARAMETER('ADDM','DBIO_EXPECTED', <new value>); If your CT (as expected) hasn't changed from default then the 20 mS per single block read is the reason for the ADDM finding.
select --+ parallel(a,4) count(*) from toto a; o col block_type for a18 col objn for a25 col otype for a15 col event for a25 col p3 for 999 col fn for 999 col sid for 9999 col qsid for 9999 select session_id sid, QC_SESSION_ID qsid, --event, --ash.p1, --ash.p2, ash.p3, CURRENT_OBJ#||' '||o.object_name objn, o.object_type otype, CURRENT_FILE# fn, CURRENT_BLOCK# blockn, ash.SQL_ID from v$active_session_history ash, all_objects o where event like 'direct path read' and o.object_id (+)= ash.CURRENT_OBJ# Order by sample_time /
col qsid for 9999 col cnt for 9999 col deg for 999 col obj for a15 col otype for a10 select ash.SQL_ID, QC_SESSION_ID qsid, count(*) cnt, count (distinct session_id) deg, --ash.p3, nvl(o.object_name,to_char(CURRENT_OBJ#)) obj, o.object_type otype, --CURRENT_FILE# fn, --CURRENT_BLOCK# blockn, decode(session_state, 'WAITING',event,'CPU') event from v$active_session_history ash, all_objects o where -- event like 'direct path read' o.object_id (+)= ash.CURRENT_OBJ# and qc_session_id is not null group by qc_session_id, sql_id, o.object_name, o.object_type, CURRENT_OBJ#, event, session_state Order by qc_session_id, sql_id / ================================ From Greg Rahn select s.sql_id, px.INST_ID "Inst", px.SERVER_GROUP "Group", px.SERVER_SET "Set", px.DEGREE "Degree", px.REQ_DEGREE "Req Degree", w.event "Wait Event" from GV$SESSION s, GV$PX_SESSION px, GV$PROCESS p, GV$SESSION_WAIT w where s.sid (+) = px.sid and s.inst_id (+) = px.inst_id and s.sid = w.sid (+) and s.inst_id = w.inst_id (+) and s.paddr = p.addr (+) and s.inst_id = p.inst_id (+) ORDER BY decode(px.QCINST_ID, NULL, px.INST_ID, px.QCINST_ID), px.QCSID, decode(px.SERVER_GROUP, NULL, 0, px.SERVER_GROUP), px.SERVER_SET, px.INST_ID;