Oracle 仅在提交时才将脏块写入光盘?

Oracle 仅在提交时才将脏块写入光盘?,oracle,oracle12c,database-performance,database-administration,sql-tuning,Oracle,Oracle12c,Database Performance,Database Administration,Sql Tuning,据我所知,DBWs将脏块写入光盘,并在执行提交操作时解锁块。然而,我认为DBWn和提交问题并没有直接关系,这真的会发生吗 如果没有,它如何执行此写入操作 因为它也被称为“懒惰的作家” 我很困惑。说您正在更新表中的记录。在非常高的抽象级别上,一旦在数据库缓冲区缓存中标识(或复制到)保存目标记录的块,就会发生以下步骤 将创建一个重做更改向量,描述如何将撤消记录插入到撤消块中。如果将来需要回滚更改,则需要此撤消。为了满足在更新启动之前启动并仍在运行的SQL,可能还需要撤消 创建一个重做更改向量,描述执

据我所知,DBWs将脏块写入光盘,并在执行提交操作时解锁块。然而,我认为DBWn和提交问题并没有直接关系,这真的会发生吗

如果没有,它如何执行此写入操作

因为它也被称为“懒惰的作家”


我很困惑。

说您正在更新表中的记录。在非常高的抽象级别上,一旦在数据库缓冲区缓存中标识(或复制到)保存目标记录的块,就会发生以下步骤

  • 将创建一个重做更改向量,描述如何将撤消记录插入到撤消块中。如果将来需要回滚更改,则需要此撤消。为了满足在更新启动之前启动并仍在运行的SQL,可能还需要撤消
  • 创建一个重做更改向量,描述执行请求更新的数据块更改
  • 结合两个重做更改向量,创建重做记录并将其写入循环重做日志缓冲区(RLB)
  • 撤消记录将插入到缓冲区缓存中的撤消块中
  • 实际更改发生在缓冲区缓存中的数据块中
  • 此时,RLB可能包含来自多个服务器进程的重做条目。RLB的一部分由单日志编写器进程(LGWR)顺序写入在线重做日志文件。仅当发生以下情况之一时,RLB中的所有重做条目才会写入联机重做日志文件

    a。其中一个服务器进程发出提交。(日志文件同步等待事件)

    b。发生日志切换(在线重做日志文件已填充,LGWR从LGWR以循环方式写入的有限数量的在线重做日志文件切换到新的在线重做日志文件)

    c。每3秒

    d。RLB已满三分之一

    e。当数据库写入程序进程(DBWn)需要将脏缓冲区写入磁盘时。(何时会出现这种需要将在后面解释)

  • 请注意,即使现在脏缓冲区(其中包含我们在缓冲区缓存中修改的块)也没有写入光盘(数据文件)。现在让我们谈谈DBWn
  • 与LGWR进程不同,可以有多个DBWn进程(由后缀n表示),它们可以异步(不受实际更改写入缓冲区缓存中数据块的时间限制,当然是在更改缓冲区后)将脏缓冲区从数据库缓冲区缓存以并行写入的方式写入磁盘。但是,这些写入仅在以下情况下发生

    a。当数据库缓冲区缓存中不再有干净的缓冲区时

    b。当检查点出现时。(检查点是重做日志文件(系统更改号(SCN))中的点,在该点之前,脏缓冲区已写入磁盘(即,在重做日志文件中的该点之前,数据文件与缓冲区缓存同步。)

  • 因此,据称DBWn仅在需要时执行延迟写入,而LGWRs执行的是快速近实时写入

    还有一件事,Oracle的粒度逻辑写入单元是块。在数据文件中的磁盘上,这个块被标识,然后复制到缓冲区缓存。Oracle从不锁定块。它在读取缓冲区之前获得缓冲区块头上的锁存。这就是为什么当某些大范围扫描阻止其他进程获取该锁存时,我们会看到“锁存缓存缓冲链”等待事件。当我们更新Oracle块中的一行时,就锁定而言,Oracle在粒度级别锁定我们更新的行


    中Oracle实例体系结构下的内存和进程体系结构是理解这些概念的好地方。

    假设您正在更新表中的记录。在非常高的抽象级别上,一旦在数据库缓冲区缓存中标识(或复制到)保存目标记录的块,就会发生以下步骤

  • 将创建一个重做更改向量,描述如何将撤消记录插入到撤消块中。如果将来需要回滚更改,则需要此撤消。为了满足在更新启动之前启动并仍在运行的SQL,可能还需要撤消
  • 创建一个重做更改向量,描述执行请求更新的数据块更改
  • 结合两个重做更改向量,创建重做记录并将其写入循环重做日志缓冲区(RLB)
  • 撤消记录将插入到缓冲区缓存中的撤消块中
  • 实际更改发生在缓冲区缓存中的数据块中
  • 此时,RLB可能包含来自多个服务器进程的重做条目。RLB的一部分由单日志编写器进程(LGWR)顺序写入在线重做日志文件。仅当发生以下情况之一时,RLB中的所有重做条目才会写入联机重做日志文件

    a。其中一个服务器进程发出提交。(日志文件同步等待事件)

    b。发生日志切换(在线重做日志文件已填充,LGWR从LGWR以循环方式写入的有限数量的在线重做日志文件切换到新的在线重做日志文件)

    c。每3秒

    d。RLB已满三分之一

    e。当数据库写入程序进程(DBWn)需要将脏缓冲区写入磁盘时。(何时会出现这种需要将在后面解释)

  • 请注意,即使现在脏缓冲区(其中包含我们在缓冲区缓存中修改的块)也没有写入光盘(数据文件)。现在让我们谈谈DBWn
  • 与LGWR进程不同,可以有多个DBWn进程(由后缀n表示),它们可以异步(不受实际更改写入缓冲区缓存中数据块的时间限制,当然是在更改缓冲区后)从dat写入脏缓冲区