select n.name,s.sid,s.VALUE from v$sesstat s,v$statname n where n.name='session logical reads' and sid=266 and n.statistic#=s.statistic#;
NAME SID VALUE
-------------------------- ---------- ----------
session logical reads 266 4541
结束session 2的跟踪
exec DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id=>266,serial_num=>1433);
如果出现了物理读,跟踪的结果中就会发现 5/130(seg hdr)、5/131(data blk)两个block会被访问到,在tracefile里可以观察到如下的字样:
WAIT #4573470248: nam='db file sequential read' ela= 16513 file#=5 block#=130 blocks=1 obj#=41088 tim=11189835682677
WAIT #4573470248: nam='db file sequential read' ela= 3417 file#=5 block#=131 blocks=1 obj#=41088 tim=11189835686504
如果没有经过物理读我们也可以通过跟踪基表x$bh来发现,方法如下:
***记录x$bh当前值:
SYS@tstdb1-SQL> select file#,dbablk,tch from x$bh where obj=41088;
FILE# DBABLK TCH
---------- ---------- ----------
5 128 0
5 128 0
5 130 2
5 130 0
5 129 0
5 129 0
5 129 0
5 131 2
5 131 0
5 131 0
5 131 0
5 131 0
5 131 0
5 131 0
5 131 0
15 rows selected.
***执行了select * from scott.t1;
***再次获取x$bh当前值后发现5/130、5/131两个block的touch count均增加了1,值得注意的是虽然只有两个block被访问过但并不一定意味着只会产生两次logical reads,这时因为x$bh里对于同一个block的访问在3秒钟内只会计数一次,一个block被访问可能会造成多次logical reads
select file#,dbablk,tch from x$bh where obj=41088
FILE# DBABLK TCH
---------- ---------- ----------
5 128 0
5 128 0
5 130 3
5 130 0
5 129 0
5 129 0
5 129 0
5 131 3
5 131 0
5 131 0
5 131 0
5 131 0
5 131 0
5 131 0
5 131 0