原文出处:
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