理解redo(7)oracle redo并行机制的原理介绍
在前面的blog中,我们知道,redo entries写入log buffer大致的过程如下: 在PGA中生产Redo Entry -> 服务进程获取Redo Copy latch(存在多个---CPU_COUNT*2) -> 服务进程获取redo allocation latch(仅1个) -> 分配log buffer -> 释放redo allocation latch -> 将Redo Entry写入Log Buffer -> 释放Redo Copy latch &n
Oracle SQL引擎体系结构图
当一条SQL提交到Oracle后、SQL引擎会分三个步骤对其处理和执行: ① Parse(解析) ② Execute(执行) ③ Fetch(获取) 这三个步骤分别由SQL引擎的不同组件来完成、下面偶大概的绘出这张体系结构图: 记住这张图、对以后的优化或许会起到事半功倍的效用
深入学习data block体系结构
环境:SQL> select * from v$version where rownum=1; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod SQL> !uname -a Linux localhost.localdomain 2.6.18-308.el5xen #1 SMP Fri Jan 27 17:59:00 EST 2012 i686 i686 i386 GNU/Linux ㈠ data block 物理结构图 ㈡ 一次对block的dump过程hr@ORCL> create table think(a varchar2(10)); Table crea
理解PGA(2)pga_aggregate_target详解
注: 1)pga_aggregate_target以下简称PAT 2)我的环境: 11:42:10 sys@ORCL (^ω^) select * from v$version where rownum=1; BANNER ---------------------------------------------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation。保留所有权利。 两个参数: 11:40:31 sys@ORCL (^ω^) s
理解redo(11)truncate和select的redo
很多系统,在作删除操作时,都只是做一个标志位,并不会去做磁盘置0那样昂贵的操作。truncate也如是,更改的只是segment header和i-node表。truncate 会产生redo,是修改数据字典产生的,不是删除数据来的。truncate降低HWM,释放extent,重新生成data_object_id。之所以比delete快,是因为它根本不需要删除数据,redo只是记录这个操作本身而不会有大量数据的redo记录。因此
理解PGA(1)PGA内存作用和构成
当客户端向服务器发送连接请求,服务器监听到客户端的请求,在专用服务器模式下,会在服务器端衍生一个server process来代理客户的请求,server process进而向实例发起连接,创建会话,而PGA就为server process所分配和使用。 PGA,这P,或译之程序,或翻为私有,角度不同而已,通常,我们称之”程序全局区“。它的创建时期:  
理解redo(10)一个IMU的问题解释
先看一个现象: 19:33:31 hr@ORCL (^ω^) select name, value 19:33:59 2 from v$mystat a, v$statname b 19:33:59 3 where a.statistic# = b.statistic# 19:33:59 4 and b.name = \'redo size\' 19:33:59 5 / NAME VALUE ---------- ---------- redo size 1084 19:34:01 hr@ORCL (^ω^) insert into t1 values(112,\'yaoqinqin\'); 已创建 1 行。 19:36:54 hr@ORCL (^ω^) select name, value 19:37:08 2 from v$mystat a, v$statname b 19:37:08 3 where a.statistic# = b.statist
理解redo(9)10g R2后oracle对redo写的增强
10G R2后,ORACLE提供了一个新参数commit_write来控制客户端commit后,ORACLE写日志的行为。这个参数值有四种组合。 · immediate , wait 注释:Server process在提交时使用semctl发送信号给LGWR,通知其Flush Log Buffer,并等待LGWR发回的消息(semtimedop).  
理解redo(5)深入学习RBA
1 定义 RBA就是redo entries在重做日志文件中所对应的地址 2 组成 RBA由三部分组成:  
理解redo(4)redo log buffer和LGWR
二者的由来,有二: 1)redo records的产生十分频繁 2)server process每次产生的量却不大 倘若每次产生的redo就须由大量高并发sp写入redo log file,则存在两个问题: 1)I/O开支大 2)redo file争用 由此,oracle在redo log机制中引入了log buffer和LGWR。 redo log
oracle体系结构三部曲之进程结构
与oracle相关的进程可分:用户进程和oracle进程。oracle进程可分:服务器进程和后台进程。服务器进程可分:专用服务器进程和共享服务器进程。后台进程可分:DBWn,LGWR,CKPT等。 和用户进程有关的概念是:连接和会话 连接和会话是两个不同的概念。一条连接上可以建立0个,1个或多个会话,而且各个会话单独且独立的。一条连接即一个进程。 在jsp中,
存储结构之重做日志文件
重做日志文件,可分在线重做日志文件和归档重做日志文件。它是个数据库的事务日志。目的在于失败时恢复已提交的事务。你在oracle中完成的每个操作几乎都会生成一定的redo信息,并写入在线重做日志文件。 当主机掉电时,你可借助在线重做日志文件,将系统恢复到掉电前的时刻;当磁盘损坏时,你可借助归档重做日志文件恢复到适当的时点;当你误删了某
存储结构之控制文件
其实,蛮蛋疼的,体系结构要想深入的理解,还需要配合后续的备份与恢复的实验和原理。但不管啦,先稍微了解一下。 控制文件是个相当小的二进制文件,最多能增长到64m左右。 参数文件告诉实例控制文件的位置。而控制文件告诉实例:数据库名,数据文件的名称及其位置,在线重做日志文件的名称及其位置,以及系统和各个数据文件的SCN
存储结构之数据文件和表空间
oracle存储结构,可分物理结构和逻辑结构。后者是为方便管理前者而生。oracle把数据逻辑地存放在表空间里,物理地存放在数据文件里。 有两个视图,我们可能会常用到: dba_data_files:描述数据文件的信息 dba_tablespaces:描述表空间的信息 这里先谈三个问题。 表空间的类型? 1)永久性表空间,如:system,sysaux,user等 &
先对oracle 体系结构有个总体的认识
Oracle体系结构,我觉得,大体可分:内存结构,进程结构和存储结构。其中,进程结构是内存结构和存储结构的沟通桥梁。 在不同的平台上,oracle体系结构的实现略有不同。比如,在unix(linux)上,实现为多进程;在windows上,实现为多线程。一般不建议把oracle部署在windows上哈。因为,win的单进程体系结构使oracle服务器最多只有2G的内存使用量。 &nb
初见undo段
学rollback segment目标:概念上清晰,原理上了解,使用上熟悉 1 undo段的定义:磁盘上的一段空间。 2当一个事务开始时,先把变化前的数据和变化后的数据写入log buffer中,然后把变化前的数据写入回滚段,最后才在database buffer cache中修改数据。 例如: Update emp set sal=4000 where ename=‘SCOTT’; 首先,LGWR会把4000和旧值3000写入log buffer 然后,把3000和一些相关信
oracle体系结构学习笔记《一》
体系结构和备份恢复原理 1 oracle database 最重要的是online redo log 类比法 controlfile :公司高管 datafile :生产车间 online redo log:财务处 注释: system表空间是第一生产车间; 当公司高管换了,财务处也需要换; 2 shared pool主要包括: library cache:放代码(sql,pl/sql,java) data dictionary
基于日志却采用三种方法来区别增量检查点和完全检查点
增量检查点的作用是为了均衡负载,由fast_start_mttr_target这个参数触发,增量渐进写出。所以,CHECKPOINT_CHANGE#会有延迟,不会马上更新。 下面用三种方法证明: 法一: 理论:日志却会有active,即:被RBA指针覆盖的日志。如是完全检查点,则RBA会一下子干到重做日志组的最后一条,没有了RBA,那么日志的状态便是inactive了;而如是增量检查点,则RBA会慢慢下移,有被RBA覆盖的