Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2803854
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2014-02-07 16:33:23

                             Private strand flush not complete 

在alert.log中发现有提示

Private strand flush not complete

查询了一下mos ID 1525395.1,表明该信息可以被安全IGNORE。

在以前每个会话都是获取redo allocation latch,copy latch来完成把redo recored从pga到log buffer的写操作,
然后再由lgwr完成由log buffer向redo log的写操作。但是随着用户的增加,这种方式可能有一定的局限性,由于
latch有限,可能会产生latch争用.所以从10g开始引入了private strand的概念.每个会话先写private strand,
然后再通过批处理的方式写到public redo buffer(也就是以前概念中的log buffer),然后lgwr再把public redo
buffer中的内容写到redo log中去.


 可以看出通过这种批处理的方式oracle减少了latch争用,而且使redo的操作更加高效.但是对于大的事务,oracle
可能会还是切换回来原来的实时生成,实时copy到redo buffer中的方式.


 再看原来的alert.log中报Private strand flush not complete,表明在写private strand到public strand的时候,
没有完成,这个时候最有可能是public strand正在被lgwr往redo log中写,导致被latch 锁定.所以原因大部分都是由
于io设备太慢,commit过多导致.
 
 mos文档建议增加db_write_processes,通过增加db_write_processes来增加脏块的写出速率。个人认为和io的关系应该
最大.也有部分的bug会导致该提示抛出.增加redo group和增大redo file的size,从而减少log switch的次数,可能效果
会更好一些.

阅读(7239) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~