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

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

来源:网络 作者:liyf0371 发表于:2012-09-04 10:04  点击:
and a.latch#=b.latch#; chain# : buffer chains hash 列表中的索引值,当这个参数的值等于s 0xfffffff时,说明当前的会话正在等待一个LRU latch。 Control file parallel write 当数据库中有多个控制文件的拷贝时

and a.latch#=b.latch#;    
chain# buffer chains hash 列表中的索引值,当这个参数的值等于s 0xfffffff时,说明当前的会话正在等待一个LRU latch。
 
  1. Control file parallel write
当数据库中有多个控制文件的拷贝时,Oracle 需要保证信息同步地写到各个控制文件当中,这是一个并行的物理操作过程,因为称为控制文件并行写,当发生这样的操作时,就会产生control file parallel write等待事件。
控制文件频繁写入的原因很多,比如:
日志切换太过频繁,导致控制文件信息相应地需要频繁更新。
系统I/O 出现瓶颈,导致所有I/O出现等待。
 
当系统出现日志切换过于频繁的情形时,可以考虑适当地增大日志文件的大小来降低日志切换频率。
当系统出现大量的control file parallel write 等待事件时,可以通过比如降低控制文件的拷贝数量,将控制文件的拷贝存放在不同的物理磁盘上的方式来缓解I/O 争用。
 
这个等待事件包含三个参数:
            Files Oracle 要写入的控制文件个数。
            Blocks 写入控制文件的数据块数目。
            Requests写入控制请求的I/O 次数。
 
  1. Control file sequential read
当数据库需要读取控制文件上的信息时,会出现这个等待事件,因为控制文件的信息是顺序写的,所以读取的时候也是顺序的,因此称为控制文件顺序读,它经常发生在以下情况:
备份控制文件
RAC 环境下不同实例之间控制文件的信息共享
读取控制文件的文件头信息
读取控制文件其他信息
 
这个等待事件有三个参数:
            File#要读取信息的控制文件的文件号。
            Block# 读取控制文件信息的起始数据块号。
            Blocks需要读取的控制文件数据块数目。
 
 
  1. Db file parallel read
这是一个很容易引起误导的等待事件,实际上这个等待事件和并行操作(比如并行查询,并行DML)没有关系。 这个事件发生在数据库恢复的时候,当有一些数据块需要恢复的时候,Oracle会以并行的方式把他们从数据文件中读入到内存中进行恢复操作。
 
这个等待事件包含三个参数:
            Files: 操作需要读取的文件个数。
            Blocks: 操作需要读取的数据块个数。
            Requests:操作需要执行的I/O次数。
 
 
  1. Db file parallel write
这是一个后台等待事件,它同样和用户的并行操作没有关系,它是由后台进程DBWR产生的,当后台进程DBWR想磁盘上写入脏数据时,会发生这个等待。
 
DBWR会批量地将脏数据并行地写入到磁盘上相应的数据文件中,在这个批次作业完成之前,DBWR将出现这个等待事件。 如果仅仅是这一个等待事件,对用户的操作并没有太大的影响,当伴随着出现free buffer waits等待事件时,说明此时内存中可用的空间不足,这时候会影响到用户的操作,比如影响到用户将脏数据块读入到内存中。
           
当出现db file parallel write等待事件时,可以通过启用操作系统的异步I/O的方式来缓解这个等待。 当使用异步I/O时,DBWR不在需要一直等到所有数据块全部写入到磁盘上,它只需要等到这个数据写入到一个百分比之后,就可以继续进行后续的操作。
 
这个等待事件有两个参数:
                        Requests 操作需要执行的I/O次数。
                        Timeouts等待的超时时间。
 
 
  1. Db file scattered read
这个等待事件在实际生产库中经常可以看到,这是一个用户操作引起的等待事件,当用户发出每次I/O需要读取多个数据块这样的SQL 操作时,会产生这个等待事件,最常见的两种情况是全表扫描(FTS: Full Table Scan)和索引快速扫描(IFFS: index fast full scan)。
 
这个名称中的scattered( 发散),可能会导致很多人认为它是以scattered 的方式来读取数据块的,其实恰恰相反,当发生这种等待事件时,SQL的操作都是顺序地读取数据块的,比如FTS或者IFFS方式(如果忽略需要读取的数据块已经存在内存中的情况)。
 
这里的scattered指的是读取的数据块在内存中的存放方式,他们被读取到内存中后,是以分散的方式存在在内存中,而不是连续的。

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