产生原因:
当系统要重新利用某个日志文件的时候,系统需要将该日志文件所包括的buffer cache 中的dirty block 写到相应的数据文件。
然后,buffer cache 中的dirty data还没有完全写到数据文件,系统的checkpoint 没有来得及完成,就已经有大量的日志需要写入到系统
系统只能通知应用:checkpoint 还没有完成,你只能等待
时间:今天接手一套老的测试库,系统运行缓慢,发现有大量的log file switch (checkpoint incomplete)等待事件
查看v$log视图,发现才3组redolog,每组redolog 才50m,不到1分钟就进行切换,io压力也巨大
解决办法,先在线添加了3组日志组,每组日志500M:
alter database add logfile group 4 ('/u01/app/oracle/oradata/orcl/redo04a.log','/u01/app/oracle/oradata/orcl/redo04b.log') size 500m;
.
.
然后在原来的redolog在inactive状态时,把原来的日志组给删掉
alter database drop logfile group 1;
.
.
在添加3个日志组,每组日志还是500M;
保证redo日志在30分钟左右可以进行切换就比较适合
要注意到,一般在这个等待时间多的时候,报警日志中同时会出现
Thread 1 cannot allocate new log 的错误
解决方法同上