技术开发 频道

Oracle常见等待事件说明

    【IT168 技术文档】Oracle的等待事件是衡量Oracle运行状况的重要依据及指标。等待事件的概念是在Oracle7.0.1.2中引入的,大致有100个等待事件。在Oracle 8.0中这个数目增加到了大约150个,在Oracle8i中大约有200个事件,在Oracle9i中大约有360个等待事件。主要有两种类别的等待事件,即空闲(idle)等待事件和非空闲(non-idle)等待事件。

    空闲事件指Oracle正等待某种工作,在诊断和优化数据库的时候,我们不用过多注意这部分事件。

    常见的空闲事件有:
    • dispatcher timer
    • lock element cleanup
    • Null event
    • parallel query dequeue wait
    • parallel query idle wait - Slaves
    • pipe get
    • PL/SQL lock timer
    • pmon timer- pmon
    • rdbms ipc message
    • slave wait
    • smon timer
    • SQL*Net break/reset to client
    • SQL*Net message from client
    • SQL*Net message to client
    • SQL*Net more data to client
    • virtual circuit status
    • client message

    非空闲等待事件专门针对Oracle的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是我们在调整数据库的时候应该关注与研究的。

    一些常见的非空闲等待事件有:
    • db file scattered read
    • db file sequential read
    • buffer busy waits
    • free buffer waits
    • enqueue
    • latch free
    • log file parallel write
    • log file sync

    1. db file scattered read-DB 文件分散读取

    这种情况通常显示与全表扫描相关的等待。当数据库进行全表扫时,基于性能的考虑,数据会分散(scattered)读入Buffer Cache。如果这个等待事件比较显著,可能说明对于某些全表扫描的表,没有创建索引或者没有创建合适的索引,我们可能需要检查这些数据表已确定是否进行了正确的设置。

    然而这个等待事件不一定意味着性能低下,在某些条件下Oracle 会主动使用全表扫描来替换索引扫描以提高性能,这和访问的数据量有关,在CBO 下Oracle 会进行更为智能的选择,在RBO 下Oracle 更倾向于使用索引。

    因为全表扫描被置于LRU(Least Recently Used,最近最少适用)列表的冷端(cold end),对于频繁访问的较小的数据表,可以选择把他们Cache 到内存中,以避免反复读取。

    当这个等待事件比较显著时,可以结合v$session_longops 动态性能视图来进行诊断,该视图中记录了长时间(运行时间超过6 秒的)运行的事物,可能很多是全表扫描操作(不管怎样,这部分信息都是值得我们注意的)。

0
相关文章