<返回更多

解密Oracle redo生成过程

2020-06-21    
加入收藏
解密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。

解密Oracle redo生成过程

测试脚本

#!/usr/sbin/dtrace -s -n
dtrace:::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
------------------------------------------------------------------------
1358
SQL> 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 200
col name for a30
select 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'
);
解密Oracle redo生成过程

redo生成过程说明

解密Oracle redo生成过程

说明

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

参考文档

《Oracle® Database Concepts 11g Release 2 (11.2) 》

原创文章,版权归本文作者所有,如需转载请注明出处

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>