日志文件相关等待

来源:互联网 发布:js调用手机浏览器 编辑:程序博客网 时间:2024/05/22 17:36

参考自盖国强《深入解析oracle》

1.log file switch (日志文件切换)
log file switch 当日志文件发生切换时出现,在数据库进行日志切换时,后台进程 LGWR需要关闭当前日志组,切换并打开下一个日志组,在这个切换过程中,数据库的所有 DML 操作都处于停顿状态,直至这个切换完成。
log file switch 主要包含两个子事件 log file switch(archiving needed)和 log file switch(checkpoint incomplete)。
(1)log file switch(archiving needed),即日志切换(需要归档),这个等待事件出现时通常是因为日志组循环写满以后,在需要覆盖先前日志时,发现日志归档尚未完成,出现该等待。由于 Redo 不能写出,该等待出现时,数据库将陷于停顿状态。出现该等待,可能表示 I/O 存在问题、归档进程写出缓慢,也有可能是日志组设置不合理等原因导致。针对不同原因,可以考虑采用的解决办法有:
可以考虑增大日志文件和增加日志组;
移动归档文件到快速磁盘;
调整 log_archive_max_processes 参数等。
(2)log file switch(checkpoint incomplete),即日志切换(检查点未完成)。当所有的日志组都写满之后,LGWR 试图覆盖某个日志文件,如果这时数据库没有完成写出由这个日志文件所保护的脏数据时(检查点未完成),该等待事件出现。该等待出现时,数据库同样将陷于停顿状态。
该等待事件通常表示 DBWR 写出速度太慢或者 I/O 存在问题。为解决该问题,用户可能需要考虑增加额外的 DBWR 或者增加日志组或日志文件大小。log file switch 引起的等待都是非常重要的,如果出现就应该引起重视,并由 DBA 介入进行及时处理。
2.log file sync(日志文件同步)
当一个用户提交或回滚数据时,LGWR 将会话期的重做由 Log Buffer 写入到重做日志中,LGWR 完成任务以后会通知用户进程。日志文件同步等待(Log File Sync)就是指进程等待LGWR 写完成这个过程。
如果该等待过多,可能说明 LGWR 的写出效率低下,或者系统提交过于频繁。针对该问题,可以关注 log file parallel write 等待事件,或者通过 user commits,user rollback 等统计信息观察提交或回滚次数。
可能的解决方案主要有:
提高 LGWR 性能,尽量使用快速磁盘,不要把 redo log file 存放在 RAID5 的磁盘上;
使用批量提交;
适当使用 NOLOGGING/UNRECOVERABLE 等选项。
可以通过如下公式计算平均 Redo 写大小:
avg.redo write size = (Redo block written/redo writes)*512 bytes
如果系统产生 Redo 很多,而每次写的较少,一般说明 LGWR 被过于频繁地激活了。如果可能,在设计应用时应该选择合适的提交批量,从而提高
数据库的效率。
Log File Sync 以 SCN 为节点,以 Buffer 号为起始,不断将 Log Buffer 的内容写出到日志文件上来
3.log file single write
该事件仅与写日志文件头块相关,通常发生在增加新的组成员和增进序列号(log switch)时。头块写单个进行,因为头块的部分信息是文件号,每个文件不同。
更新日志文件头这个操作在后台完成,一般很少出现等待,无需太多关注。
4.log file parallel write
从 log buffer 写 Redo 记录到日志文件,主要指常规写操作(相对于 log file sync)。如果每个日志组存在多个组成员,当 flush log buffer 时,写操作是并行的,这时此等待事件可能出现。
该事件等待时间过长,说明日志文件所在磁盘缓慢或存在争用。
从两个方面入手解决:
(1)将日志文件组放置到高速I/O磁盘上。
(2)尽可能的降低重做数量:
—尽可能使用Nologging选项,包括create table...as select...操作                                           
—热备份可能创建大量的重做信息,所以热备份应该在非高峰时间运行,并且尽可能将表空间排除在热备份模式外
5.log Buffer Space-日志缓冲空间
当数据库产生日志的速度比 LGWR 的写出速度快,或者是当日志切换(log switch)太慢时,就会发生这种等待。这个等待出现时,通常表明 redo log buffer 过小,为解决这个问题,可以考虑增大日志文件的大小,或者增加日志缓冲区的大小。
另外一个可能的原因是磁盘 I/O 存在瓶颈,可以考虑使用写入速度更快的磁盘。在一般的系统中,最低的标准是,不要把日志文件和数据文件存放在一起,因为通常日志文件只写不读,分离存放可以获得性能提升,尽量使用 RAID10 而不是 RAID5 磁盘来存储日志文件。

阅读全文
0 0
原创粉丝点击