log file sync日志等待

当用户会话(前台进程)提交(或回滚)时,会话的redo信息需要刷入到重做日志文件中。 用户会话将使用LGWR来将日志缓冲区中所需的所有redo请求写入重做日志文件。当LGWR完成后,它将通知用户进程。用户会话将出现该等待事件,同时等待LGWR将其回发以确认所有重做更改都安全地在磁盘上。

换句话说,用户会话/前台进程花费的时间等待刷新重做以使得commit等待更长时间。因此,我们可以将这些等待视为来自前台进程(或通常的提交客户端)的提交延迟。

该等待事件越多,可能说明LGWR的写效率低或者系统提交(回滚)过于频繁。通常发生在OLTP系统上。

对于自身范围内产生的等待

  1. 查看动态性能视图V$SESSION_WAIT涉及到的“log file sync”参数

P1 = buffer#

P2 = not used / sync scn

P3 = not used

注:

buffer#:此缓冲区编号(在日志缓冲区中)的所有更改都必须刷新到磁盘并确认写入以确保事务已提交,并且将在实例崩溃时保持提交。因此等待LGWR刷新到此buffer#。

sync scn:10.2.0.5.0及更高版本会使用到。表示需要同步到磁盘的SCN值的基础。等待LGWR刷新SCN值。

  1. 等待时间

等待完全依赖于 LGWR写出到必要的重做块并确认完成返回用户会话。等待时间包括日志缓冲区的写入和post。在某些版本中,waiter超时并在等待时每隔一段时间增加序列号(旧版本中间隔时间是以1秒为单位,新版本中游戏自适应)。

  1. 寻找“Blockers”

如果会话继续在相同的buffer#上等待,则V$SESSIONwww.cungun.comIT的SEQ#列可能会增加,具体取决于所使用的等待方案。如果buffer#值没有改变,需要检查看看LGWR正在等待什么,因为它可能被卡住了。还要检查等待进程是否还活着。

对于系统范围内产生的等待

“log file sync”上等待的系统范围的数字显示了等待提交(或回滚)完成所花费的时间。如果这很重要,那么LGWR可能存在问题。还需要关注:

  1. LGWR的另一个等待事件"log file parallel write"
  2. “user commit”和”user rollback”的统计信息,查看正在发出的提交和回滚的次数。

减少等待和等待时间的方法

有五个方法可以减少该等待事件的时间:

  1. 调整 LGWR 获得更好的磁盘吞吐量。如: 不要将重做日志放在RAID 5上,因为RAID 5对于频繁写入的系统会带来较大的性能损失。
  2. 如果有很多小事务,看是否可以将事务BATCH放在一起,从而减少不同的COMMIT操作。 每次提交都必须确认相关的REDO刷到磁盘上。尽管Oracle可以“piggybacked”提交,但通过批处理事务来减少提交的总数会产生非常好的效果。
  3. 查看是否有任何处理可以使用COMMIT NOWAIT选项(但在使用之前一定要了解它的语义)。
  4. 查看是否可以使用NOLOGGING / UNRECOVERABLE选项安全地完成任意操作。
  5. 检查重做日志是否足够大。增大重做日志,使日志在15到20分钟之间切换。

另外,日志文件同步等待的总时间可以细分为以下几种:

  1. 空闲时唤醒 LGWR
  2. LGWR收集要写入的redo操作并发出I/O请求
  3. 日志写I/O完成时间
  4. LGWR I/O开始工作
  5. LGWR通知写入完成的前台/用户会话
  6. 前台/用户会话唤醒

你可能感兴趣的:(log file sync日志等待)