Log_buffer 的等待事件确认问题,在调优 Oracle 的时候还挺常碰到的。尤其是搞手动内存管理的时候,一不注意就容易被 LGWR 卡住,性能嗖嗖掉。这个培训文档讲得挺系统,先用 SQL 把SID查出来,再定位到LGWR进程,整个排查逻辑挺清楚的。适合你在做 Oracle 内存调优、定位log_buffer瓶颈的时候参考。

讲到log_buffer优化,Oracle 自动内存管理与手动管理的 log_buffer 设置那篇文章也蛮有用的。还有个Log_Buffer_Wait_Event_Initial_Statistics_Training也值得一看,讲初始统计的思路,适合搭配来看。

还有一点要提醒你,如果你是从自动内存管理切换到手动,别忘了确认v$sessionv$bgprocess之间的绑定关系,尤其是后台进程像 LGWR 这种,出错了不是小问题。

SQL 部分也直白,用的是:

select c.sid, a.name 
from v$bgprocess a, v$process b, v$session c 
where a.paddr = b.addr 
  and b.addr = c.paddr 
  and a.name = 'LGWR';

用这个就能快速找出LGWRSID,再结合v$session_wait等待事件,效率还挺高的。

如果你平时经常需要 Oracle 日志或等待事件的活儿,这篇文档和相关链接还是蛮值得收藏的。