Log_buffer 的等待事件确认问题,在调优 Oracle 的时候还挺常碰到的。尤其是搞手动内存管理的时候,一不注意就容易被 LGWR 卡住,性能嗖嗖掉。这个培训文档讲得挺系统,先用 SQL 把SID
查出来,再定位到LGWR
进程,整个排查逻辑挺清楚的。适合你在做 Oracle 内存调优、定位log_buffer
瓶颈的时候参考。
讲到log_buffer
优化,Oracle 自动内存管理与手动管理的 log_buffer 设置那篇文章也蛮有用的。还有个Log_Buffer_Wait_Event_Initial_Statistics_Training也值得一看,讲初始统计的思路,适合搭配来看。
还有一点要提醒你,如果你是从自动内存管理切换到手动,别忘了确认v$session
和v$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';
用这个就能快速找出LGWR
的SID
,再结合v$session_wait
等待事件,效率还挺高的。
如果你平时经常需要 Oracle 日志或等待事件的活儿,这篇文档和相关链接还是蛮值得收藏的。