ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于 Thread cannot allocate new log的处理

关于 Thread cannot allocate new log的处理

Linux操作系统 作者:ericwen2015 时间:2016-02-15 11:19:51 0 删除 编辑

        当系统要重新利用某个日志文件的时候,系统需要将该日志文件所包括的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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30373825/viewspace-1988911/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-07-26

  • 博文量
    41
  • 访问量
    24886