zoukankan      html  css  js  c++  java
  • log file sync

    针对上图进行简单的描述:
     
    1、当user发起一个commit后;
     
    2、前端进程(即Server 进程)会post一个信息给lgwr进程,告诉它,你应该去写redo buffer了。
     
    3、当LGWR进程得到指示后,开始调用操作系统函数进行物理写,在进行物理写的这段时间内,会出现
     
    log file parallel write等待。这里或许有人会有疑问,为什么12c之前只有一个lgwr进程,这里却是parallel
     
    write呢?这里需要说明一下,lgwr进程在将redo buffer中的数据写出到log file文件中时,也是以batch方式
     
    进程的(实际上,dbwN进程也是batch的模式),有相关的隐含参数控制。
     
    4、当LG
    WR完成wrtie操作之后,LGWR进程会返回一个信息给前端进程(Server进程),告诉它,我已经写完了,你可以完成提交了。
     
    5.   user 完成commit操作。
     
    这里补充一下,这是由于Oracle 日志写优先的原则,假设在commit之前redo buffer的相关entry信息不立即写到redolog file中,那么如果数据库出现crash,那么这是会丢数据的。


    6.
    1、进程接到提交请求
    2、进程通过LGWR写redo数据到Redo文件
    3、LGWR写Redo到文件
    4、LGWR写完通知进程
    5、进程收到写完成通知,向用户端发送提交完成。
    从步1开始,进程开始等待log file sync,到步5结束。
    步3、步4,LGWR等待log file parallel write。
    log file sync比log file parallel write大很大,有两个原因,一是CPU紧张,二是同时提交的进程多。
    你应该是第二种情况。
    你想一下,如果10个进程同时提交,每个进程等0.1秒,加起来就一共等了1秒。而log file parallel write只会有一个进程等待,
    就是LGWR。


  • 相关阅读:
    iOS适配 旧项目工程在iOS9下不能正常显示
    字典的操作
    均摊时间复杂度
    C++基础
    机器学习入门学习线路
    C\C++对文件的读写操作
    python 函数基础
    关于string的练习题目
    C++之STL之string
    C++STL库之set的用法
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352051.html
Copyright © 2011-2022 走看看