v$sesssion_wait 等待事件:性能调优最重要的一个指标 v$session v$sqltext v$session_wait v$system_event select * from v$system_wait_class s order by s.time_waited v$event_name select name,parameter1,parameter2,parameter3 from v$event_name where name='db file scattered read' select * from v$event_name select e.wait_class#,e.wait_class_id e.wait_class,count(*) as '数量'from v$event_name e group by e.wait_class#,e.wait_class_id e.wait_class order by e.wait_class# select name,wait_class from v$event_name e where e.wait_class#=6 select sid,event,p1,p1text from v$session select sid from v$mystat where rownum <2 select s.sql_text from v$sqltext s where s.hashvalue=(select sql_hash_value from v$session a where sid=130) order by s.piece asc awr top sql select s.event,p1,p1text,p2,p2text,p3,p3text,wait_time, seconds_in_wait,state from v$session_wait s where sid=130 常见等待事件
v$sesssion_wait 等待事件:性能调优最重要的一个指标 v$session v$sqltext v$session_wait v$system_event select * from v$system_wait_class s order by s.time_waited v$event_name select name,parameter1,parameter2,parameter3 from v$event_name where name='db file scattered read' select * from v$event_name select e.wait_class#,e.wait_class_id e.wait_class,count(*) as '数量'from v$event_name e group by e.wait_class#,e.wait_class_id e.wait_class order by e.wait_class# select name,wait_class from v$event_name e where e.wait_class#=6 select sid,event,p1,p1text from v$session select sid from v$mystat where rownum <2 select s.sql_text from v$sqltext s where s.hashvalue=(select sql_hash_value from v$session a where sid=130) order by s.piece asc awr top sql select s.event,p1,p1text,p2,p2text,p3,p3text,wait_time, seconds_in_wait,state from v$session_wait s where sid=130 常见等待事件 db file scattered read private String file# private String block#; private String blocks; File# 要读取的块所在的数据文件文件号 block# 要读取的数据文件的起始数据号 blocks 要读取数据块的数量 >1 db file sequential read File# 要读取的块所在的数据文件文件号 block# 要读取的数据文件的起始数据号 blocks 要读取数据块的数量 =1 db file sequential read File# 要更新的块所在的数据文件文件号 block# 要更新的数据文件的起始数据号 blocks 要读取数据块的数量 =1 db file single write 数据文件的数量太多。 db file parallel read files blocks requests db file parallel write free buffer waits timeouts buffer busy waits: 一个会话正在等待一个buffer数据块 file# 等待访问数据块所在的文件的id号 blocks 等待访问的数据块的号 ID buffer busy waits 如果一个会话 要访问一个数据块,这个数据块正在被另外一个用户从物理磁盘读取到内存中,或者这个数据块正在被另一个serverprocess修改 cache buffer chain 访问LRU的时候等待事件 不同热块的处理方式是不同的 table block index block root index block file header block buffer latch DB_BLOCK_LRU_LATCHES latch addr chain# select from v$latch l1,v$latchname l2 where l1.addr = latch addr and l1.latch#=l2.latch# create table t as select * from dba_objects; create index t_index_object_id on t(object_id); exec dbms_stats.gather_table_stats(user,'t',cascade=>true); -- select dbms_rowid.rowid_block_number(rowid),count(*) rowperblock from t group by dbms_rowid.rowid_block_number(rowid) select rowperblcok,count(*) from ( select dbms_rowid.rowid_block_number(rowid),count(*) rowperblock from t group by dbms_rowid.rowid_block_number(rowid)) group by rowperblcok alter table t1 minimize records_per_block v$session_longops set timing on select * from emp; select * from v$session_longops; create table lotest as select aaa,bbb from dual connect by aaaa<10000000 select a.sid,a.opname,a.sfar,a.totalwork,a.sql_hash_value from v$session_longops a; select a.sql_text from v$sqlarea a,v$session_longops b where a.hasn_value = b.sql_hash_value
direct path read 意味着磁盘上有大量的临时数据产生 descriptor address 指向当前会话正在等待的一个 direct readIO library cache lock library cache pin library cache的作用:存储共享游标 hash hash_table 保存的是对象地址,根据对象地址访问对象 heap 句柄中记录: 对象的名字 锁的持有者 等待者 pin的持有者 等待者 堆的地址 计算hash值 ,在hashtable中找到句柄,在句柄中找到堆的地址。 对象句柄 =》library cache lock 内存堆 =》library cache pin library cache lock三种模式 null share exclusive library cache pin两种模式 share exclusive 修改对象:获得这个对象的句柄的exclusive类型的lock, 并且拥有这个堆上的exclusive锁。 访问对象:访问这个对象handler上的null的锁和堆上的shared pin null锁: select * from a; --查询等待事件对应的用户名等 ***** select a.username,a.machine,a.sid,a.serial#,a.status,c.sql_text from v$session a ,v$process b,v$sqltext c where b.addr=a.paddr and a.sql_address=c.address and s.sid in (select sid from v$session_wait where event='') --- select s.sid,kglpnmod "lock-mode" from v$session_wait w,x$kglpn p,v$session s,v$process o where p.kglpnuse= s.saddr and kglpnhdl=w.p1raw and w.event like '%library cache lock%' and s.paddr = o.addr sid lock-mode 111 0 111 0 111 0 111 0 222 3 222 3 1 null 2 share 3 exclusive --- log file paralled write file 写入的文件的个数 blocks requests log buffer space log file sequential read log file single write log file switch SQL*NET AWR 性能收集、分析的工具 awrrpt.sql @