日志相关等待--联机重做日志文件I/O等待事件

REDO对于数据库来说非常重要,有一系列等待事件和日志相关,通过V$EVENT_NAME视图可以找到这些等待事件。

我们以11g为主:

SELECT * FROM V$EVENT_NAME A WHERE A.NAME LIKE '%log%';

 

 

log file switch(日志文件切换)

SELECT * FROM V$EVENT_NAME A WHERE A.NAME LIKE 'log file switch %';

 

 

当数据库日志文件发生切换时出现,LGWR需要关闭当前日志组,切换并打开下一个日志组,在这个切换过程中,数据库的所有DML操作都处于停顿状态,直至这个切换完成。

这个等待事件是指执行日志文件切换命令的时候等待日志文件切换完成,Oracle数据库会每隔五秒钟就检测一次是否超时。如果出现这个等待事件,表明花费了很长的时间去切换重做日志文件,此时我们需要去检查数据库的告警日志文件查看Oracle后台进程LGWR是否正常在工作。

log file switch引起的等待都是非常重要的,如果出现就应该引起重视,并由DBA介入进行及时处理。

 

log file switch包含5个子事件:

1. log file switch (archiving needed),即日志切换(需要归档)

这个等待事件出现时通常是因为日志组循环写满以后,在需要覆盖先前日志时,发现日志归档尚未完成,出现该等待。由于Redo不能写出,该等待出现时,数据库将陷于停顿状态。

这个等待事件是指当前的重做日志文件准备切换到下一重做日志文件,但是当前重做日志文件因为没有被归档而导致等待,这个等待事件只出现于采用了归档方式的Oracle数据库中。

如果出现这个等待事件,首先应该查看Oracle数据库的告警日志文件,看是否因为写归档日志文件错误导致归档进程停止,其次,可以增加归档进程的数量或者将归档日志文件存放到I/O速度比较快的磁盘上,还可以通过增大和增加重做日志文件的大小和数量来给予归档更多的时间。

出现该等待,可能表示I/O存在问题、归档进程写出缓慢、日志切换太快,也有可能是日志组设置不合理、日志文件太小、redo生成太多等原因导致。针对不同原因,可以考虑采用的解决方法有:

① 可以考虑增大日志文件和增加日志组;

② 移动归档文件到快速磁盘;

③ 调整log_archive_max_processes参数等;

2. log file switch (checkpoint incomplete),即日志切换(检查点未完成)

当一个在线日志切换到下一个在线日志时,必须保证要切换到的在线日志上的记录的信息(比如一些脏数据块产生的redo log)被写到磁盘上(checkpoint),这样做的原因是,如果一个在线日志文件的信息被覆盖,而依赖这些redo信息做恢复的数据块尚未被写到磁盘上(checkpoint),此时系统down掉的话,Oracle将没有办法进行实例恢复。当所有的日志组都写满之后。LGWR试图覆盖某个日志文件,如果这时数据库没有完成写出由这个日志文件所保护的脏数据时(检查点未完成),该等待事件出现。该等待出现时,数据库同样将陷于停顿状态。

 在日志切换时,会完成一个检查点操作,如果此检查点完成的过于缓慢,就会造成此事件的等待,检查点为什么会缓慢呢?可能是buffer cache太大因此容纳的脏块太多,DBWR进程太少,调整检查点频率的参数设置频率太低等原因造成的.

在v$log 视图里记录了在线日志的状态。 通常来说,在线日志有三种状态。

Active: 这个日志上面保护的信息还没有完成checkpoint。

Inactive: 这个日志上面保护的信息已完成checkpoint。

Current: 当前的日志。

 

Oracle 在做实例恢复时,会使用状态为current和Active的日志进行实例恢复。

如果系统中出现大量的log file switch(checkpoint incomplete)等待事件,原因可能是日志文件太小或者日志组太少,DBWR写出速度太慢或者I/O存在问题,所以解决的方法是,考虑增加额外的DBWR或者增加日志文件的大小或者增加日志组的数量。

同时警告日志文件中会记录如下信息:

Fri Nov 18 14:26:57 2005

Thread 1 cannot allocate new log, sequence 7239

Checkpoint not complete

Current log# 5 seq# 7238 mem# 0: /opt/oracle/oradata/hsmkt/redo05.log

 

增加日志:

alter database add logfile thread 1  group 3 ('/oradata/backera3/redo03.log') size 256M;

alter database add logfile thread 2  group 4 ('/oradata/backera3/redo04.log') size 256M;

 

 3. log file switch completion

这个等待事件是指由于当前重做日志文件已经被写满了而Oracle后台进程LGWR需要完成写完当前重做日志文件并且要打开一个新的重做日志文件而导致的重做日志文件切换的等待,或者是其他请求需要切换重做日志文件导致等待。

如果当前的重做日志写满了,这个时候Oracle数据库就需要切换重做日志文件来提供足够的磁盘空间给重做日志写日志缓存。但是由于一些其他的进程也同样可以引起重做日志的切换,Oracle数据库不会同时去切换重做日志两次,因此,就出现了这个等待事件,在Oracle数据库早期的版本中还有log_file_switch_checkpoint_incomplete、log_file_switch_archiving_needed、log_file_switch_clearing_log_file的等待事件。

当一个日志文件满了,oracle要打开另一个日志文件,写完上一日志文件,准备好下一日志文件,这之间的等待就是此等待事件了,简单点说,就是为了完成日志文件切换而发生的等待.

4. log file switch (clearing log file)

这发生在DBA发布alter system clear log file命令.且LGWR正需要切换到被清空的日志文件.等待时间是1秒.很少见。

 

5. log file switch (private strand flush incomplete)

很少见。

 

©著作权归作者所有:来自51CTO博客作者小麦苗DB宝的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 如何正确的删除表空间数据文件
  2. DBCA静默方式建库
  3. SD卡插上一体机时显示文件或目录损坏且无法读取请问咋才能修复
  4. 【DB笔试面试490】 如何导出csv和html文件?
  5. NAO机器人py文件植入
  6. 企业服务器中了.PGP后缀的勒索病毒该如何处理?
  7. 容器无法启动,修改Nginx配置文件的方法
  8. 怎么找回误删除的文件?
  9. BBED系列之编译安装(1)

随机推荐

  1. 使用异步库汇编数据库中的所有标记
  2. 在angularjs中动态添加/删除checked属性
  3. HTML最简单的隐藏/显示和类过滤器
  4. javascript阻塞加载问题【转】
  5. AngularJS:登录cookie过期时如何注销
  6. 调用另一个html页面后,选择列表值不会保持
  7. 怎么javascript读取本地文件中的数据,并显
  8. RequireJS中的命名模块与未命名模块
  9. 更新:在Gulpfile中带有postCSS和Babel的
  10. 推json敲出可观察的数组