|
Lesson7
[php]
7 Tuning the Redo Log Buffer
* After completing this lesson, you should be able to do the following:
Determine if processes are waiting for space in the redo log buffer
Size the redo log buffer appropriately
Reduce redo operations
* Redo Log Buffer Content
1. 对每个DML/DDL, Oracle Server从用户内存中拷贝redo entries到redo log buffer中
2. redo entries记录INSERT, UPDATE, DELETE, CREATE, ALTER, or DROP的重建或redo信息,对数据库恢复很有用,在buffer中占用连续顺序的空间
3. Redo log buffer 循环写, 覆盖已写入redo log file中的redo log buffer
4. 尺寸:
由初始化参数LOG_BUFFER决定尺寸, default值由os指定,一般为最大block size的4倍
较大的log_buffer值减少了log file的I/O,特别是事务较长较多
如果设置值小于OS指定的值,数据库启动时oracle server将自动扩大到os指定的值大小
select 'V$PARAMETER' "Table name", name,to_number(value,'9999999') "Value"
from v$parameter
where name = 'log_buffer'
UNION
select 'V$SGASTAT' "Table name", name, bytes
from v$sgastat
where name ='log_buffer'
Table name NAME Value
----------- ---------------------
V$PARAMETER log_buffer 32768
V$SGASTAT log_buffer 66560
* Tuning the Redo Log Buffer
Diagnosing Problems
1. 如果机器CPU很快,但disk相对较慢,则处理器可在LGWR写一部分buffer到disk的同时,将新的redo entries填充到log buffer
空余位置,因此较大的buffer有利于减少冲突
2. 如果server process试图写新的entries到log buffer中,而没有空间,此时须等待LGWR将buffer写入disk file
Tuning Goal
保证server process请求的log buffer时有足够的空间 -- 不过过多的space将减少分配给其他区域的内存
Tuning the Redo Log Buffer
Diagnostic Tools
V$SESSION_WAIT 通过事件'Log Buffer Space'指示出是否存在任何空间等待(session写入log buffer比LGWR写出快)
select sid, event, seconds_in_wait, state
from v$session_wait
where event = 'log buffer space%'
其中: SECONDS_IN_WAIT字段指明等待空间的时间(由于log switch未发生) -- buffer填充比LGWR写出快
也指明了redo log file所在的disk I/O竞争
V$SYSSTAT 指明用户进程在拷贝新的entries覆盖已写入disk的entries时等待空间的次数
SELECT name, value
FROM v$sysstat
WHERE name = 'redo buffer allocation retries';
SELECT name, value -- Active log file已满,Oracle Server等待磁盘空间分配
FROM v$sysstat -- 执行log switch释放空间
WHERE name = 'redo log space requests';
Guidelines
V$SESSION_WAIT.SECONDS_IN_WAIT应没有等待,若有则考虑:
如果log buffer小,增加参数LOG_BUFFER
将log buffer移到更快的disk -- striped disks????
V$SYSSTAT
SELECT name, value FROM v$sysstat
WHERE name IN ('redo buffer allocation retries','redo entries');
其中的redo buffer allocation retries应该接近0,不能超过1%的redo entries,若此值持续增长,
则process等待buffer中的space,这可能是由于log buffer太小引起的,也可能是检查点或log switch引起的
-- 增加log buffer的大小(在SGA中log buffer较小,增大它不会对其他部分有很大影响)
-- 改进checkpoint 或归档进程
Guidelines
增加LOG_BUFFER直到wait ratio稳定下来
LOG_BUFFER大小必须为os block size的整数倍
Further Investigations 深入研究
研究LGWR慢的原因
1. redo log file I/O竞争, redo log file应放在单独的速度快的disk上
2. V$SYSTEM_EVENT视图中的事件:Log File Switch Completion,指明由于LOG SWITCH的wait事件
select event, total_waits, time_waited, average_wait
from v$system_event
where event like 'log file switch completion%';
考虑增加log file的size
3. LGWR需要一文件而DBWn没有完成该文件的checkpoint时,LGWR只好等待
-- alert.log文件中有"CHECKPOINT NOTCOMPLETE."
-- V$SYSTEM_EVENT中查找事件Log File Switch (Checkpoint Incomplete)的发生次数,
它标识由于checkpoint未完成而log file switch waits
select event, total_waits, time_waited, average_wait
from v$system_event
where event like 'log file switch (check%';
-- 检查checkpoint发生频率,调整参数LOG_CHECKPOINT_INTERVAL and LOG_CHECKPOINT_TIMEOUT
-- Check the size and number of redo log groups.
4. 归档不能及时完成,使LGWR等待
-- 确保归档目的地disk未满
-- Add redo log groups
-- 检查V$SYSTEM_EVENT中事件Log File Switch (Archiving Needed)的数量
它标识因归档未完成而使log file switch waits
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来指定多个归档进程
5. DB_BLOCK_CHECKSUM=true 将加重性能负担
[/php] |
|