AWRRPT 性能报表 如何抓出TOP5事件的SQL? 
Top 5 Timed Events 
Event Waits Time(s) Avg Wait(ms) % Total Call Time Wait Class
enq: TX - row lock contention 104,495 169,736 1,624 38.1 Application
CPU time   139,969   31.4  
db file sequential read 9,951,617 33,781 3 7.6 User I/O
db file scattered read 13,478,226 21,210 2 4.8 User I/O
log file sync 1,616,424 20,392 13 4.6 Commit以上是依据从周一到周四九点的快照的AWR报表ENQ:TX-ROW LOCK CONTENTION 事件 在周一时候没有出现在AWR TOP 5事件上.AWR 后面所列的SQL 都是以时间,硬盘读和缓冲读来排序的
如何找出造成TOP5 事件的SQL 呢?

解决方案 »

  1.   

    Top   5   Timed   Events   
    Event Waits Time(s) Avg   Wait(ms) %   Total   Call   Time Wait   Class 
    enq:   TX   -   row   lock   contention 104,495 169,736 1,624 38.1 Application 
    CPU   time   139,969   31.4   
    db   file   sequential   read 9,951,617 33,781 3 7.6 User   I/O 
    db   file   scattered   read 13,478,226 21,210 2 4.8 User   I/O 
    log   file   sync 1,616,424 20,392 13 4.6 Commit 
    因为你的top events等待最严重的是enqueue
    从这里可以看出来是tx锁的竞争但是由于没有在当时抓取到v$lock的信息现在是无法看出来enqueue等待出现在什么情况下ITL
    bitmap
    unique
    以及会话间的相互锁等待都会引起enqueue等待因此我建议你在故障出现的时候抓现场的v$lock情况
      

  2.   

    另外你的这个awrrp收集了多少个间隔的数据如果是一小时的话看起来等待确实是比较高至少如何抓sql.这个得看你的event了
    比如:
    db       file       sequential       read   9,951,617   33,781   3   7.6   User       I/O   
    db       file       scattered       read   13,478,226   21,210   2   4.8   User       I/O   这两个你就得根据v$sql_plan来检查top sql的执行计划了如果cpu确实是很高 而且影响到了你的性能 那么buffer_gets是你需要仔细去检查的
    以及parse情况 看看每一条sql