当前位置:  数据库>oracle

理解redo(4)redo log buffer和LGWR

    来源: 互联网  发布时间:2017-05-05

    本文导语: 二者的由来,有二:    1)redo records的产生十分频繁    2)server process每次产生的量却不大 倘若每次产生的redo就须由大量高并发sp写入redo log file,则存在两个问题:    1)I/O开支大    2)redo file争用 由此,Oracle在redo log...

二者的由来,有二:
    1)redo records的产生十分频繁
    2)server process每次产生的量却不大
 
倘若每次产生的redo就须由大量高并发sp写入redo log file,则存在两个问题:
    1)I/O开支大
    2)redo file争用
 
由此,Oracle在redo log机制中引入了log buffer和LGWR。
    redo log buffer缓存了sp产生的redo records,提高了oracle高并发的性能。LGWR则将log buffer中的records批量flush到redo file。对于oracle而言,只要对数据库的改变写入到redo log file,那么相关的事务绝不丢失。
 
    在事务提交时,会产生一个commit的change vector,这个CV被写入log buffer后,sp会发出一个信号,要求LGWR将和这个事务相关的redo records写入到redo file,只有这个事务相关的redo全部安全着陆,sp才会向client发出事务提交成功的信息“Commit Complited”。
 
    由于redo entries实是娇贵且重要。为了保障redo records的安全,oracle还实现了:
    1)LGWR绕过OS的缓冲直接写到redo log file,避免宕机而丢失redo
    2)redo log file的block size和数据库的block size是完全不同的,事实上,和OS的I/O block size如出一辙,从而一个redo block在一次物理i/o时可以同时写入而不出现块断裂。
 
    redo buffer是一个循环使用的顺序读写的buffer:
    1)redo records写入log buffer是按顺序的
    2)当log buffer写满后,会从头开始写(这种情况是不会出现的)
 
    log buffer数据的写入是由sp完成的,这个写操作属于高并发,而log buffer的空间分配是个串行操作。所以需要锁的保护:
    1)redo copy latch:写redo 到redo log buffer
    2)redo allocation latch:控制log buffer空间分配
 
    为了腾出更多的log buffer,oracle设计了LGWR写的触发条件:
    1)commit时
    2)1M redo entries时
    3)超过_log_io_size参数指定的大小时
    缺省值是LOG BUFFER大小的1/3,这个参数单位是REDO LOG BLOCK




























  • SQL> col name for a15  
  • SQL> col value for a10  

  •     
     
     

    您可能感兴趣的文章:

  • Protocol Buffer技术深入理解(C++实例)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • DirectDraw:lpitch的理解
  • 分布式系统的故障独立性如何理解
  • 对TCP协议状态及状态转换理解
  • 套接字应该怎么理解
  • c/c++内存堆分配和栈分配理解
  • 如何理解fork函数返回2次啊?
  • 请问下面一句话应该怎样理解?
  • 句柄?句柄?“句柄”到底是什么东西?怎样理解?
  • unsigned char modeflags :5;是如何来理解?
  • 问一个《深入理解计算机系统》中的问题
  • 深度理解try{}cathc(){}
  • 深入理解PHP内核 TIPI
  • 求最容易理解,最容易上手的java书籍,servlet书籍,请指教,谢谢!!
  • 在JTree中的USEROBJECT有什么用处,我一直不理解?
  • 如何理解ResourceBundle和Locale?和应用的场合?谢谢
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • System.gc();怎么理解?
  • system.map文件的作用和理解
  • 数据库 iis7站长之家
  • 如何准确理解“程序”、“进程”、“线程”这三个概念
  • makefile这句话应该则怎么理解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,