日期:2013-12-01  浏览次数:20378 次



原文出处:

http://www.eygle.com/statspack/statspack14-LogFileSync.htm

当一个用户提交(commits)或者回滚(rollback),session的redo信息需求写出到redo logfile中.
用户进程将通知LGWR执行写出操作,LGWR完成任务当前会通知用户进程.
这个等待事件就是指用户进程等待LGWR的写完成通知.

对于回滚操作,该事件记录从用户发出rollback命令到回滚完成的时间.

如果该等待过多,可能说明LGWR的写出效率低下,或者系统提交过于频繁.
针对该问题,可以关注:
log file parallel write等待事件
user commits,user rollback等统计信息可以用于观察提交或回滚次数

处理方案:
1.提高LGWR功用
尽量使用快速磁盘,不要把redo log file存放在raid 5的磁盘上
2.使用批量提交
3.适当使用NOLOGGING/UNRECOVERABLE等选项

可以通过如下公式计算平均redo写大小:

avg.redo write size = (Redo block written/redo writes)*512 bytes

如果系统产生redo很多,而每次写的较少,普通说明LGWR被过于频繁的激活了.
可能导致过多的redo相关latch的竞争,而且Oracle可能无法无效的使用piggyback的功用.

我们从一个statspack中提取一些数据来研讨一下这个问题.

1.次要信息

DB Name DB Id Instance Inst Num Release OPS Host------------ ----------- ------------ -------- ----------- --- ------------DB 1222010599 oracle 1 8.1.7.4.5 NO sun Snap Id Snap Time Sessions ------- ------------------ -------- Begin Snap: 3473 13-Oct-04 13:43:00 540 End Snap: 3475 13-Oct-04 14:07:28 540 Elapsed: 24.47 (mins)Cache Sizes~~~~~~~~~~~ db_block_buffers: 102400 log_buffer: 20971520 db_block_size: 8192 shared_pool_size: 600MLoad Profile~~~~~~~~~~~~ Per Second Per Transaction --------------- --------------- Redo size: 28,458.11 2,852.03 ......

2.等待事件

 

Event Waits Timeouts Time (cs) (ms) /txn---------------------------- ------------ ---------- ----------- ------ ------log file sync 14,466 2 4,150 3 1.0db file sequential read 17,202 0 2,869 2 1.2latch free 24,841 13,489 2,072 1 1.7 direct path write 121 0 1,455 120 0.0db file parallel write 1,314 0 1,383 11 0.1log file sequential read 1,540 0 63 0 0.1....log file switch completion 1 0 3 30 0.0refresh controlfile command 23 0 1 0 0.0LGWR wait for redo copy 46 0 0 0 0.0....log file single write 4 0 0 0 0.0

我们看到,这里log file sync和db file parallel write等待同时出现了.
显然log file sync在等待db file parallel write的完成.

这里磁盘IO肯定存在了瓶颈,实际用户的redo和数据文件同时存放在Raid的磁盘上,存在功用问题.
需求调整.

3.统计信息

 

 Statistic Total per Second per Trans--------------------------------- ---------------- ------------ ------------....redo blocks written 93,853 63.9 6.4redo buffer allocation retries 1 0.0 0.0redo entries 135,837 92.5 9.3redo log space requests 1 0.0 0.0redo log space wait time 3 0.0 0.0redo ordering marks 0 0.0 0.0redo size 41,776,508 28,458.1 2,852.0redo synch time 4,174 2.8 0.3redo synch writes 14,198 9.7 1.0redo wastage 4,769,200 3,248.8 325.6redo write time 3,698 2.5 0.3redo writer latching time 0 0.0