log file sync, log file parallell write

SQL> select name,parameter1,parameter2,parameter3,wait_class from v$event_name where name in( 'log file sync','log file parallel write');

NAME                                          PARAMETER1 PARAMETER2 PARAMETER3 WAIT_CLASS
--------------------------------------------- ---------- ---------- ---------- ----------------------------------------------------------------
log file parallel write                       files      blocks     requests   System I/O
log file sync                                 buffer#                          Commit

log file parallel write等待事件位于System I/O类,它有三个参数,第一个参数表示将要写的文件个数,第二个参数表示将要写入的block个数,第三个参数表示I/O请求的个数。

log file sync             等待事件位于Commit类下,它只有一个参数,它表示log file中block的块号。

当用户发出commit,rollback的时候,就会触发lgwr进程将产生的redo record写入到log file中,这个过程称为日志同步写入。

其余条件的redo record 写入到log file称为后台写入。

出现log file sync等待事件是很频繁的,它很短,如果系统在awr报告,statspack报告中发现有log file sync

通常是由于过于频繁的提交,日志文件所在磁盘I/0缓慢,或者是log buffer太大引起的。

很多人不理解为什么log buffer过大会造成log file sync等待事件,这是由于log buffer过大,会使lgwr懒惰,因为日志写的触发条件有一个是1/3的log buffer满。当设置过大的log buffer,也会让一次性写入过大的redo record到log file中,写得过多导致log file sync等待。有一个隐含参数可以控制redo 写的阀值:_log_io_size。

所以没有必要将log buffer设置过大,只要没有出现log buffer space等待事件,log buffer大小就足够,而且通常默认情况下log buffer是足够的。

注意log file sync是用户commit/rollback触发的。

当一个session等待lgwr将log buffer的redo record 写入到log file 就会产生log file parallel write等待事件

log file parallel write 是由lgwr进程引起的,不是user commit/rollback引起的,这点从oracle的分类我们就可以看出。

通常出现该等待事件是由于重做日志所在磁盘I/O缓慢,或者存在争用。

一般情况下log file parallel write和log file sync都是同时出现的。

原文地址:https://www.cnblogs.com/hehe520/p/6330663.html