- 当系统要重新利用某个日志文件的时候,系统需要将该日志文件所包括的buffer cache 中的dirty block 写到相应的数据文件。由于对于一个数据库操作而言,它可能产生的redo 量仅仅是几十字节,但是对于buffer cache中确是一个block (一般为8k)。所以,对于一个仅仅是几百M的日志文件,它所保护的buffer cache 可能是几个G
- 一旦发生"Thread 1 cannot allocate new log",表明系统的checkpoint 没有来得及完成,也就是说 buffer cache 中的dirty data还没有完全写到数据文件,就已经有大量的日志需要写入到系统。而系统只能通知应用:checkpoint 还没有完成,你只能等待。这个时候,系统就基本处于hang 状态了 When the database waits on checkpoints,redo generation is stopped until the
log switch is done - 如果,我们在这个时候查看系统信息,就会发现:v$log中的日志状态大多处于active 状态; v$session_wait 中会有很多log file switch 事件的发生
- 解决办法: a. 添加更多的日志文件 b. 加大checkpoint 触发的频度 c. 减小redo log 的size d. 提高DBWR的效率 e. 为了更好的了解系统的运行,可以设置 log_checkpoint_interval = 0 log_checkpoint_timeout = 0 log_checkpoints_to_alert=True
Thread 1 cannot allocate new log
精选 转载xuwu147220591 博主文章分类:Oracle
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
new thread 、 new stack和New Object的形象说明
e2 studio的使用
堆栈 Stack 网络协议栈 -
Cannot allocate memory 之二
背景早上ssh远程连接服务器的时候不能连接,ping却能Ping通,控制台登陆,输入任何命令都提示:fork:Cannotallocatememory解决方法1想查看是不是最大连接数被用满了,使用psefL,发现命令不能用,使用more,tail,free,top等等命令均不能用,我试着使用echo,如下:echo"kernel.pid_max=655300"/etc/sysctl.confsys
cannot allocate memo 最大连接数 最大打开文件数 pid_max kernel.pid_max -
error='Cannot allocate memory'
...
java tomcat hive apache 再启动