online redo log files是Oracle数据库最重要的物理结构之一,由于Write-Ahead-Log(即日志写入优先)机制,确保instance failure时,实例级恢复正常完成,已提交的数据被正常恢复,本文主要通过dtrace工具分析redo产生过程中latch资源的申请过程,分析Oracle redo生成的详细过程。
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。

#!/usr/sbin/dtrace -s -ndtrace:::BEGIN{ i=1;} pid$1::kslgetl:entry,pid$1::kslfre:entry/pid == $1/{ printf("i=%d pid:::==%s:%s:%s:%s %x %x %x %d %x %x",i, probeprov, probemod, probefunc, probename,arg0,arg1,arg2,arg3,arg4,arg5); i=i+1;}
【session 1】:
查询进程id
SQL> select spid from v$process where ADDR in (select PADDR from v$session where sid=(select sid from v$mystat where rownum=1)); SPID------------------------------------------------------------------------1358SQL> create table orastar.t1(c1 varchar2(10),c2 varchar2(10)); Table created.
【session 2】:
启动dtrace程序
./list_latch.d -x switchrate=10hz 1391 > list_latch.log
【session 1】:
生成redo entries:
SQL> insert into orastar.t1 values(1,1);1 row created. SQL> commit;Commit complete.
【生成latch地址】
cat list_latch.log |grep kslgetl|awk '{print "'\''" "00000000" $6 "'\''" ","}'|sort $1 | uniq
【查询latch查询】
set line 200col name for a30select lower(addr),LATCH#,NAME,HASH,GETS,WAIT_TIME from V$LATCH_CHILDREN where lower(addr) in ('000000006000d178','000000006000d370','000000006000d7e8','000000006002dab8','000000006010df10','00000000bb137e80','00000000bb5d6868','00000000bb6d6a28','00000000bb6d8570','00000000bb7d8730','00000000bc593120','00000000bc6ba8f0','00000000bc6e7998','00000000bc6ea088','00000000bc6ea128','00000000bd6c4fe0','00000000bd6c50d8','00000000bd6c5338','00000000be263330','00000000be26f100','00000000be95ed98');


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一体机用户组

QQ群号:763628645
QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

订阅我的微信公众号“杨建荣的学习笔记”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。






