Oracle DB 体系结构

内存结构:

  1. 系统全局区(SGA):数据库缓冲区高速缓存、重做缓冲区以及各种池
  2. 程序全局区(PGA)

进程结构:

  1. 用户进程和服务器进程
  2. 后台进程:SMON、PMON、DBWn、CKPT、LGWR、ARCn 等

存储结构:

  1. 逻辑:数据库、方案、表空间、段、区和Oracle 块
  2. 物理: 数据文件、控制文件和重做日志文件

Oracle DB 服务器由一个数据库(Oracle DB)以及一个或多个数据库实例组成。每当启动一个实例时,都会分配一个称为系统全局区的共享内存区,并启动后台进程,然后装载数据库(与特定数据库相关联),一个Oracle DB 实例可以有多个后台进程

对上述结构术语的详解:

  1. SGA包含实例的数据和控制信息,主要包含以下结构:
    1)数据库缓冲区高速缓存:用于缓存从数据库(数据文件)中检索到的数据块
    2)重做日志缓冲区:存放有关对数据库所做更改的信息,用来缓存用于实例恢复的重做信息,直到可以将其写入磁盘中存储
    3)共享池:用于缓存可在用户间共享的各种结构,包括库高速缓存、数据字典高速缓存、SQL 查询结果高速缓存、PL/SQL 函数结果高速缓存、并行执行消息的缓冲区以及控制结构
    4)大型池:用于某些大型进程(例如Oracle 备份和恢复操作)和I/O 服务器进程
    5)Java 池:用于Java 虚拟机(JVM) 中特定于会话的所有Java 代码和数据
    6)流池:Oracle Streams 使用它来存储捕获和应用操作所需的信息
  2. 常见后台进程包括:
    1)数据库写进程(DBWn):将数据库缓冲区高速缓存中经过修改的缓冲区写入磁盘
    2)日志写进程(LGWR):将重做日志缓冲区写入磁盘上的重做日志文件中,在用户提交事务处理时会执行这个进程
    3)检查点进程(CKPT):将检查点信息记录在控制文件和每个数据文件头中
    4)系统监视器进程(SMON):在实例启动时执行恢复,同时负责清除不使用的临时段
    5)进程监视器进程(PMON):在用户进程失败时执行进程恢复,监视会话是否发生空闲会话超时,将数据库服务动态注册到监听程序
    6)恢复器进程(RECO):自动解决涉及分布式事务处理的故障
    7)作业队列进程
    8)归档进程(ARCn):在发生日志切换之后,将重做日志文件复制到指定的存储设备,可以收集事务处理重做数据,并将该数据传输到备用目标位置
    9)队列监视器进程(QMNn)

用一个网上的例子说明(非原创,忘记哪里复制来的了):
有一家叫甲骨文的粮店,老板很严谨,为了防止仓库的粮食在买入卖出的时候发生问题,他制订一套流程,首先进出仓库的每一担粮食都要求有一个编号(SCN),而且出入库之前必须先放到一个平台上(Buffer Cache),他命令仓库叫大头的伙计(Datafile Head)来首先记录这个编号,然后每隔一定的时间(log_checkpoint_timeout)或者库房平台上的粮食堆放到一定的数量或者仓库伙计换班(log swtich)的时候,一个叫“点点”(CKPT)的后院家奴就会把仓库伙计记录的信息拿给帐房先生同时还会催促把放在仓库平台的粮食入仓或者出仓(DBWn),帐房先生根据“点点”拿来的帐页记录到自己的帐本上。这样一来每天老板要和账房先生、仓库伙计进行账务的核对,一旦发现仓库伙计记录了而帐房先生没记录的情况就要求帐房先生把伙计记录的信息誊写到自己的帐本上,而如果发现帐房先生有记录了而仓库伙计这里却没有,那就麻烦大了,这说明仓库伙计有可能把之前的记录帐页给丢掉了,也就意味着粮食有丢失的危险,不过也不用过分担心,老板手下还有一个给力干将叫“SMON”, 是的,之所以给力就是因为是个洋和尚,外来的和尚会念经嘛。这个”SMON”的洋和尚会想办法去找这些编号的粮食,一旦找到就会让仓库伙计按照帐房先生的记录来重新同步自己的帐本,这事就算是完了,可一旦连“SMON”都搞不定,那么老板就头大了,生意就得关张,意味着有粮食可能会丢失。这时候要么从其他地方找来一摸一样的粮食充数,还要让帐房先生和仓库伙计的帐本都清空从0开始重新记录,以免又出现不同的情况。

SCN

System Change Number,当Oracle数据库更新后,由DBMS自动维护去累积递增的一个数字。

Buffer Cache

为了能够加快处理数据的速度,oracle必须将读取过的数据缓存在内存里。而这些缓存在内存里的数据就是数据高速缓存区(Buffer Cache),buffer cache就是一块含有许多数据块的内存区域,而这些数据块主要都是数据文件里的数据块内容的拷贝。通过初始化参数:buffer_cache_size来指定buffer cache的大小。

Datafile Head

数据文件头,是datafile 的第1第2个block(块),记录SCN和CheckPoint

CKPT(checkpoint)

这是Oracle的一个内部事件,这个事件激活以后会触发数据库写进程(DBWR)将数据缓冲(DATA BUFFER CACHE)中的脏数据(被修改过的数据)块写出到数据文件中。

DBWn

和DBWr(Database Writer)是一个概念,后来允许多进程写data file,所以改成DBWn了,负责把buffer cache内的脏数据写入数据文件,一般是接收到checkpoint进程的指令后执行,但是当server process在buffer cache中无法找到可用的buffer时,也会调用DBWn清理buffer cache,保证用户进程始终可以在buffer cache中找到空闲的位置

SMON

系统监视进程,System Monitor,可以利用一句话来概括,即人小鬼大。其负责的内容并不是很多,但是对于数据的安全与数据库的性能却有很关键的作用。随着表空间中的数据不断的建立、删除、更新等等,在表空间中难免会产生碎片。由于这些碎片的存在,数据库的性能会逐渐的降低。而SMON的作用,就可以解决这些碎片。

最后:一条SQL请求过程

用户运行一条DML 类型的SQL 语句并提交事务处理。服务器进程接收该语句,并检查共享池中是否有包含相同SQL 语句的共享SQL 区域。如果找到共享SQL 区域,服务器进程将检查用户对于所请求数据的访问权限,并且使用现有的共享SQL 区域处理该语句。如果未找到共享SQL 区域,则为该语句分配一个新的共享SQL 区域。共享SQL 区域创建好后,服务器进程从实际数据文件(表)或数据库缓冲区高速缓存中存储的值中得到此次SQL的结果。由于提交了事务处理,日志写进程(LGWR)会把该事务处理记录到重做日志文件中。数据库写进程(DBWn)会待执行效率高时将修改后的块永久写入磁盘

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值