调整重做日志缓冲区的大小
--调整LOG_BUFFER参数
--缺省值:512K或128K * cpu_count的值,二个中较大的一个
v$session_wait视图指明在”log buffer space%”事件过程中,是否存在因会话向日志缓冲区中写入数据的速度大于LGWR写出数据的速度,而产生的任何对日志缓冲区空间的等待。
select sid,event,second_in_wait,state from v$session_wait where event=’log buffer space%’
重做缓冲区再分配的统计比例:(redo buffer allocation retries)
redo buffer allocation retries 的值应该接近0。此数值不应大于重做条目的1%。如果该数值持续递增,则进程不得不等待缓冲区的空间。
SELECT r.VALUE "Retries",e.VALUE "Entries", r.VALUE/e.VALUE*100 "Percentage" FROM v$sysstat r,v$sysstat e WHERE r.NAME = 'redo buffer allocation retries' AND e.NAME = 'redo entries' |
等待可能是由于日志缓冲区太小、检查点操作或归档操作造成的。在这种情况下,可以:
--如果必要,通过更改初始化参数log_buffer的值来增加日志缓冲区的大小
--或者,改进检查点或归档进程
重做日志缓冲工通常很小,适当增加其大小可以显著提高吞吐量。
--因为不会发生日志切换,所以”log buffer space%”事件的seconds_in_wait值表明了用于等待重做日志缓冲区空间所用的时间。
这表明填充缓冲区的速度比LGWR写入更快,也可能表明在重做日志文件上发生了磁盘I/O
争用。
--v$sysstat视图中的” redo buffer allocation retries”统计信息反映了用户进程等待重做日志缓冲区空间的次数,等待日志缓冲区空间的目的是为了新条目复制到日志缓冲区,从而覆盖其中已被写出到磁盘的条目。LGWR的写入速度通常很快,足以确保缓冲区的空间总可以写入新条目,即使在对重做日志的访问很频繁也是如此。
重做日志缓冲区优化原则
不应出现”log buffer space”等待
select sid, event, seconds_in_wait, state from v$session_wait where event = ‘log buffer space’; |
“redo buffer allocation retries”值应接近0,并且小于重作条目的1%
select name,value from v$sysstat where name in (‘redo buffer allocation retries’,’redo entries’; |
“log buffer space%”事件seconds_in_wait参数
在v$session_wait中,如果”log buffer space%”事件的seconds_in_wait值表明在重做日志缓冲区中等待空间花费卫些时间,则可以考虑采取以下操作:
--如果日志缓冲区很小,则增加其大小
--将日志文件移动到更快的磁盘,如条带化磁盘。
select sid,event,second_in_wait,state from v$session_wait where event=’log buffer space%’; |
研究LGWR释放缓冲区缓慢的可能原因:
--在重做日志文件中存在磁盘I/O争用。检查重做日志文件是否存储在单独的快速设备中。
a)在v$system_event视图中,检查发生 “log file switch completion%”事件的次数,该次数为由于日志切换而等待次数。
select event,total_waits,time_waited,average_wait from v$system_event where event like ‘log file switch completion%’; |
a) 如果在LGWR再次需要文件之前DBWn仍未完成设置文件检查点,LGWR将不得不等待。
--在alert.log文件中,检查”checkpoint not complete”消息。
--在v$system_event视图中,检查发生”log filel switch (check%”事件的次数,该次数为因未完成检查点而引起的日志文件切换等待的次数。
select event, total_waits, time_waited, average_wait from v$system_event where event like ‘log file switch(check%’; |
--检查检查点的频率,并为fast_start_mttr_target设置相应的值。
--检查重做日志组的大小和数量。
b) 归档程序不能向已归档的重做日志文件中写入数据,或者完成归档操作的速度不够快。因此,它将阻止LGWR写入。
--确认归档设备空间未满,并添加重做日志组。
--在v$system_event视图中,检查发生”log file switch(arch%”事件的次数,该次数表明因归档问题而引起的日志文件切换等待的次数。
select event, total_waits,time_waited, average_wait from v$system_event where event like ‘log file switch(arch%’; |
只要当前的ARCn进程数不足以处理工作量,LGWR进程就会启动新的ARCn进程。如果预计有繁重的归档工作量,例如,在批量加载数据期间,就可以用log_archive_max_processes初始化参数指定多归档程序进程的最大数量。此参数是动态参数,可以使用alter system语句进行更改。