暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

解密Oracle redo生成过程

1837

作者简介

惠星星,现就职于北京海天起点,持有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。

测试脚本

 

#!/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;}

测试redo entries写入redo log buffer

【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');

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

QQ群号763628645

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



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

最后修改时间:2020-06-21 09:08:43
文章转载自杨建荣的学习笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论