解密Oracle redo生成过程

作者简介:惠星星,现就职于北京海天起点,持有OCP 10g、OCP 11g、OCM 11g证书,并有长达8年电力行业业务维护、数据库维护服务经验,擅长Oracle数据库性能优化、故障处理及数据可视化技术研究。
online redo log files是Oracle数据库最重要的物理结构之一,由于Write-Ahead-Log(即日志写入优先)机制,确保instance failure时,实例级恢复正常完成,已提交的数据被正常恢复,本文主要通过dtrace工具分析redo产生过程中latch资源的申请过程,分析Oracle redo生成的详细过程。

关于Redo Log Buffer

 redo log buffer 是SGA中的一个循环缓冲区,主要存储 redo entries。 redo entries包含重构或重做DML或DDL操作对数据库所做的更改所需的信息。数据库恢复将redo entries 应用于数据文件,以重构丢失的更改。

Oracle数据库进程将redo entries从用户内存空间复制到SGA中的重做日志缓冲区。redo entries占用缓冲区中连续的、顺序的空间。LGWR进程将redo log buffer 中的redo entries写入磁盘上online redo log files。


测试脚本

测试redo entries写入redo log buffer

【session 1】:

查询进程id

【session 2】:

启动dtrace程序

【session 1】:

生成redo entries:

分析过程

【生成latch地址】

【查询latch查询】

redo生成过程说明

  • server process在user memory space中产生redo entry
  • server process获取redo copy latch
  • server process 获取redo allocation latch
  • 在log buffer中分配空间
  • 释放redo allocation latch
  • server process将redo entry信息写入到log buffer中
  • 释放redo copy latch

说明

以上内容为个人多次测试结果,由于个人原因,如有分析不足之处还请见谅及指正,谢谢。

参考文档

Oracle® Database Concepts 11g Release 2 (11.2)

未经允许不得转载:Oracle一体机用户组 » 解密Oracle redo生成过程

相关推荐