有时会在alert.log中看到
Thread 2 cannot allocate new log,sequence 1585
Checkpoint not complete
Current log# 1 seq# 1584 mem# 0: / .../...redo01.log
在告警日志中有时会出现Checkpoint not complete或者Archival required,他们的效果类似。
发生情况:1.DBWR还没有完成重做日志所保护数据的检查点
2.ARCH还没有把将重做日志归档
3.日志文件切换
4.日志缓冲区空间问题
在这种情况下数据库会暂停用户的活动,出现这种情况一般因为:
1.日志文件大小不合适
2.DBWR太慢
3.ARCH太慢
有时数据库会出现前10000行很快,然后就会呈喷射状进行:10000行后,就暂停,然后又很快,之后又暂停的情况。
一下是一些解决方法:
1.加快DBWR。启用ASYNC I/O、使用DBWR I/O从属进程,或者使用多个DBWR进程。看看系统产生的I/O,查看是否有一个磁盘(或者一组磁盘)"太热",相应地需要将数据散步看。这个建议对ARCH也适用。这种做法的好处是,不用付出代价就能有所收获,性能会提高,而且不必修改任何逻辑结构代码。这种方法确实没有缺点。
2.增加日志文件个数。
3.重新增加更大日志文件。
4.频繁发生检查点。可以使用一个更小的快缓冲区缓存,这种方法不建议使用,会产生更多严重后果。采用这种方法是设置FAST_START_MTTR_TARGET、LOG_CHECKPOINT_INTERVAL、或者LOG_CHECKPOINT_TIMEOUT之类的参数。(不建议这么用,缺点多多)