主页 > 知识库 > 数据库 > Oracle >

Oracle 常见的33个等待事件(4)

来源:网络 作者:liyf0371 发表于:2012-09-04 10:04  点击:
这个等待事件有三个参数: File# : 要读取的数据块所在数据文件的文件号。 Block# : 要读取的起始数据块号。 Blocks : 需要读取的数据块数目。 Db file sequential read 这个等待事件在实际生产库也很常见,当Or

 
这个等待事件有三个参数:
File# 要读取的数据块所在数据文件的文件号。
Block# 要读取的起始数据块号。
Blocks需要读取的数据块数目。
 
 
  1. Db file sequential read
这个等待事件在实际生产库也很常见,当Oracle 需要每次I/O只读取单个数据块这样的操作时,会产生这个等待事件。 最常见的情况有索引的访问(除IFFS外的方式),回滚操作,以ROWID的方式访问表中的数据,重建控制文件,对文件头做DUMP等。
 
这里的sequential也并非指的是Oracle 按顺序的方式来访问数据,和db file scattered read一样,它指的是读取的数据块在内存中是以连续的方式存放的。
 
这个等待事件有三个参数:
File#: 要读取的数据块锁在数据文件的文件号。
Block#: 要读取的起始数据块号。
Blocks:要读取的数据块数目(这里应该等于1)。
 
 
  1. Db file single write
这个等待事件通常只发生在一种情况下,就是Oracle 更新数据文件头信息时(比如发生Checkpoint)。
 
当这个等待事件很明显时,需要考虑是不是数据库中的数据文件数量太大,导致Oracle 需要花较长的时间来做所有文件头的更新操作(checkpoint)。
 
这个等待事件有三个参数:
File#: 需要更新的数据块所在的数据文件的文件号。
Block#需要更新的数据块号。
Blocks需要更新的数据块数目(通常来说应该等于1)。
 
 
  1.  Direct path read
这个等待事件发生在会话将数据块直接读取到PGA当中而不是SGA中的情况,这些被读取的数据通常是这个会话私有的数据,所以不需要放到SGA作为共享数据,因为这样做没有意义。 这些数据通常是来自与临时段上的数据,比如一个会话中SQL的排序数据,并行执行过程中间产生的数据,以及Hash Join,merge join产生的排序数据,因为这些数据只对当前的会话的SQL操作有意义,所以不需要放到SGA当中。
 
当发生direct path read等待事件时,意味着磁盘上有大量的临时数据产生,比如排序,并行执行等操作。 或者意味着PGA中空闲空间不足。
 
这个等待事件有三个参数:
Descriptor address:       一个指针,指向当前会话正在等待的一个direct read I/O。
First dba: descriptor address 中最旧的一个I/O数据块地址。
Block cnt: descriptor address上下文中涉及的有效的buffer 数量。
 
 
 
  1.  Direct path write
这个等待事件和direct path read 正好相反,是会话将一些数据从PGA中直接写入到磁盘文件上,而不经过SGA。
 
这种情况通常发生在:
使用临时表空间排序(内存不足)
数据的直接加载(使用append方式加载数据)
并行DML操作。
 
这个等待事件有三个参数:
            Descriptor address: 一个指针,指向当前会话正在等待的一个direct I/O.
            First dba: descriptor address 中最旧的一个I/O数据块地址。
            Block cnt: descriptor address 上下文中涉及的有效地 buffer 数量。
 
 
  1.  Enqueue
Enqueue 这个词其实是lock 的另一种描述语。
 
当我们在AWR 报告中发现长时间的enqueue 等待事件时,说明数据库中出现了阻塞和等待,可以关联AWR报告中的enqueue activity部分来确定是哪一种锁定出现了长时间等待。
 
这个等待事件有2个参数:
            Name: enqueue 的名称和类型。
Mode: enqueue的模式。
 
可以使用如下SQL 查看当前会话等待的enqueue名称和类型:
/* Formatted on 2010/8/12 11:00:56 (QP5 v5.115.810.9015) */
SELECT   CHR (TO_CHAR (BITAND (p1, -16777216)) / 16777215)
         || CHR (TO_CHAR (BITAND (p1, 16711680)) / 65535)
            "Lock",
         TO_CHAR (BITAND (p1, 65535)) "Mode"
  FROM   v$session_wait
 WHERE   event = 'enqueue'
 
Oracle 的enqueue 包含以下模式:
 
模式代码 解释
1 Null mode
2 Sub-Share
3 Sub-Exclusive
4 Share
5 Share/Sub-Exclusive
6 Exclusive

有帮助
(0)
0%
没帮助
(0)
0%