LGWR worker group 是12C的新特性,默认是启动的状态。也可以叫做"LGWR slave group" or “multiple Log Writers.”
当处于启动状态时,至少会生成出两个后台进程lg00,lg01。该特性由_use_single_log_writer 参数控制,可选的值为TRUE,FALSE,ADAPTIVE(默认值)。设置为 ADAPTIVE 或 FALSE 时为启动状态。
_use_single_log_writer 为 false时

_use_single_log_writer 为 ADPTIVE时

_use_single_log_writer 为 TRUE时

当启用LGWR worker group 新特性时,会衍生出下面几个等待事件
LGWR intra group sync
LGWR worker group ordering
LGWR any worker group
LGWR intra group IO completion
LGWR all worker groups
下面使用10046和strace 来跟踪一下LGWR及其附属进程。
LGWR all worker groups和LGWR any worker group 是LGWR进程产生的等待事件
[oracle@node1 trace]$ cat racdb1_lgwr_87082.trc | grep "LGWR any worker group" |wc -l 14308 [oracle@node1 trace]$ cat racdb1_lgwr_87082.trc | grep "LGWR all worker group" |wc -l 3726
LGWR worker group ordering 是LGWR的附属进程LGnn产生的等待事件
[oracle@node1 trace]$ cat racdb1_lg00_87086.trc | grep "LGWR worker group ordering" |wc -l 1383

黄色为LGWR strace 绿色LG00
当所有进程都空闲的情况下,当前台进程发出commit命令后,LGWR进程被唤醒,结束rdbms ipc message。
然后调用LG00 进行redo落盘。
LG00 被唤醒后结束LGWR worker group idle,使用io_submit 进行IO提交(从日志中可以看出是异步I/O)。随后经历了ASM IO for non-blocking poll 等待(当redo在ASM中时,会出现该等待事件。ASM 的一步IO)。io_getevents一步IO完成,从而完成了log file parallel write。

当前台进程发出commit命令后,然后发出写任务。发现没有空闲的worker,陷入LGWR any worker group等待,当出现空闲进程时。唤醒LG00,使用一步IO进行redo日志落盘。
该特性可能会降低LGWR的性能,从而影响commit。
当出现该问题时,可以将_use_single_log_writer 设置为true 关闭新特性。
note:
11G中LGWR空闲状态

19C中LGWR及附属进程的空闲状态

公众号:ZXM的学习笔记
墨天伦:https://www.modb.pro/u/15528




