分类: Oracle
2010-07-20 09:28:15
direct path read
select a.NAME,
b.SID,
b.VALUE,
round((sysdate - c.LOGON_TIME) * 24) hours_connected
from v$statname a, v$sesstat b, v$session c
where b.SID = c.SID
and a.STATISTIC# = b.STATISTIC#
and b.VALUE > 0
and a.NAME = 'physical reads direct'
order by b.VALUE
SELECT a.event,
a.sid,
c.sql_hash_value hash_vale,
decode(d.ktssosegt,
1,
'SORT',
2,
'HASH',
3,
'DATA',
4,
'INDEX',
5,
'LOB_DATA',
6,
'LOB_INDEX',
NULL) AS segment_type,
b.tablespace_name,
b.file_name
FROM v$session_wait a, dba_data_files b, v$session c, x$ktsso d
WHERE c.saddr = d.ktssoses(+)
AND c.serial# = d.ktssosno(+)
AND d.inst_id(+) = userenv('instance')
AND a.sid = c.sid
AND a.p1 = b.file_id
AND a.event = 'direct path read'
UNION ALL
SELECT a.event,
a.sid,
d.sql_hash_value hash_value,
decode(e.ktssosegt,
1,
'SORT',
2,
'HASH',
3,
'DATA',
4,
'INDEX',
5,
'LOB_DATA',
6,
'LOB_INDEX',
NULL) AS segment_type,
b.tablespace_name,
b.file_name
FROM v$session_wait a,
dba_temp_files b,
v$parameter c,
v$session d,
x$ktsso e
WHERE d.saddr = e.ktssoses(+)
AND d.serial# = e.ktssosno(+)
AND e.inst_id(+) = userenv('instance')
AND a.sid = d.sid
AND b.file_id = a.p1 - c.VALUE
AND c.NAME = 'db_files'
AND a.event = 'direct path read'
注:如果是从临时文件中读取排序段的会话,则表明SORT_AREA_SIZE或PGA_AGGREGATE_TARGET的设置是不是偏小。如果是从临时文件中读取HASH段的会话,则表明HASH_AREA_SIZE或PAG_AGGREGATE_TARGET的设置是不是偏小。
SELECT decode(a.qcserial#, NULL, 'PARENT', 'CHILD') stmt_level,
a.sid,
a.serial#,
b.username,
b.osuser,
b.sql_hash_value,
b.sql_address,
a.degree,
a.req_degree
FROM v$px_session a, v$session b
WHERE a.sid = b.sid
ORDER BY a.qcsid, stmt_level DESC
>> 使用10046第8层跟踪直接读取操作的ORACLE会话,其中P3参数表明块读取的数量。
>> 也可使用strace,truss追踪直接读取或直接写入操作的UNIX进程,从生成的TRACE文件可获得相应的直接IO大小。
>> 在第1层使用追踪事件10357,启动执行直接IO操作的会话的调试信息。
事件号:212
事件名:direct path read
参数一:读取数据文件的绝对文件号码file number
参数二:起始块号first dba
参数三:要读取的块数block cnt
由参数P1与P2推得访问的数据对象:
select s.segment_name, s.partition_name
from dba_extents s
where
注:
>> 1. 如果是Temp文件,则表示该会话正在读取它先前用direct path write操作所创建的临时段,查明使用的是什么类型的临时段,有助于了解会话所做的事情。
SELECT DISTINCT decode(t.ktssosegt,
1,'SORT',
2,'HASH',
3,'DATA',
4,'INDEX',
5,'LOB_DATA',
6,'LOB_INDEX',
'UNDEFINED')
FROM sys.x$ktsso t
WHERE t.inst_id = userenv('instance') AND
t.kssoses = <当前session地址> AND
t.ktssosno =
>> 2. 如果是数据文件,则可能是并行查询从属操作在工作,通过P1值确定数据文件的名称:
select s.NAME from v$datafile s where s.FILE# =
union all
select a.name
from v$tempfile a, v$parameter b
where b.NAME = 'db_files'
and a.FILE# + b.VALUE =
SELECT a.NAME,
b.sid,
b.VALUE,
round((SYSDATE - c.logon_time) * 24) hours_connected
FROM v$statname a, v$sesstat b, v$session c
WHERE a.statistic# = b.statistic#
AND b.sid = c.sid
AND b.VALUE > 0
AND a.NAME = 'physical writes direct'
事件号:213
事件名:direct path write
参数一:要写入的绝对文件号file number,可发现所进行的操作性质(如:排序/并行操作)
参数二:起始块号first dba
参数三:块数block cnt,可发现直接写入IO的大小
由参数P1与P2推得访问的数据对象:
select s.segment_name, s.partition_name
from dba_extents s
where
注:
>> 1. 如果是Temp文件,则表示该会话正在写入临时表空间,查明使用临时段的类型,有助于了解会话所做的事情。
SELECT DISTINCT decode(t.ktssosegt,
1,'SORT',
2,'HASH',
3,'DATA',
4,'INDEX',
5,'LOB_DATA',
6,'LOB_INDEX',
'UNDEFINED')
FROM sys.x$ktsso t
WHERE t.inst_id = userenv('instance') AND
t.kssoses = <当前session地址> AND
t.ktssosno =
>> 2. 如果是数据文件,则可能正在执行一项直接路径加载操作,通过P1值确定数据文件的名称:
select s.NAME from v$datafile s where s.FILE# =
union all
select a.name
from v$tempfile a, v$parameter b
where b.NAME = 'db_files'
and a.FILE# + b.VALUE =