【数据库】Oracle体系结构和组件

Oracle体系结构和组件

系统的体系结构决定了数据库如何使用内存、硬件和网络,以及哪个进程或程序运行在哪台机器上。
Oracle数据库服务器有两个主要的组成部分:数据库和实例(instance)。Oracle数据库用于存储和检索信息,是数据的集合。Oracle实例是指数据库服务器的内存及相关处理程序。

Oracle体系结构组件概览

图示并解释Oracle体系结构和组件

Oracle体系结构如下图所示:

在这里插入图片描述

物理结构

一个Oracle数据库的物理结构,是由为数据库信息提供真实屋物理存储的操作系统文件决定的。

  • 控制文件
  • 数据文件
  • 重做日志文件

内存结构

Oracle内存结构由两个存储区域组成:

  • 系统全局区(System Global Area,SGA):在实例启动时被分配,是Oracle实例的一个基本组件

  • 程序全局区(Program Global Area,PGA):在服务器进程启动时分配

系统全局区

SGA(系统全局区)包括共享池、数据库缓冲区高速缓存、重做日志缓冲区、Java池、大型共享池等(锁管理、统计数据)。

SGA能配置两个可选存储结构:大池Java池

  • SGA是可变大小的,使用SGA_MAX_SIZE来设置大小
  • SGA组件分配SGA内存空间,并分割成更小的颗粒
    • 分配连续的虚拟内存
    • 基于SGA_ MAX_ SIZE来分配大小

1. 共享池(SHARE POOL)

共享池

共享池包括库高速缓存数据字典高速缓存,共享池的主要作用和功能如下:

  1. 共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。

  2. 共享池由库缓存和数据字典缓存组成。

  3. 库缓存含有最近执行的SQL、PL/SQL语句的分析码和执行计划;

  4. 数据字典缓存含有从数据字典中得到的表、索引、列定义和权限等信息。共享池的大小直接影响数据库的性能。

  5. 共享池的大小由初始化参数shared_pool_size决定,该参数以KB或MB为单位。默认的大小为8MB。

  6. 查询语句:SQL > show parameter shared_pool_size

  7. 用如下命令可以调整,参数为SHARED_POOL_SIZE

    ALTER SYSTEM SET
    SHARED_POOL_SIZE = 64M;
    

2. 数据高速缓冲区(DATABASE BUFFER CACHE)

  1. 最近最少使用(LRU)算法来管理
  2. 用于存储从磁盘数据文件中读入的数据,服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不再从磁盘读取,提高了读取速度。
  3. 数据高速缓冲区中存放着Oracle系统最近使用过的数据库数据块。
  4. 数据缓冲区的大小对数据库的读取速度有直接的影响。
  5. 数据缓冲区直接由初始化参数文件中的DB_CACHE_SIZE参数决定,DB_ CACHE_ ADVICE能被设置为收集统计量,以预测不同高速缓存的大小调整
  6. DB_BLOCK_SIZE用于定义标准块的大小
  7. 查询语句:SQL > show parameter db
  8. 可以使用ALTER_SYSTEM动态调节大小,包括增加或减小
ALTER SYSTEM SET DB_CACHE_SIZE 96M;

3. 重做日志缓冲区(REDO LOG BUFFER)

  1. 日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。
  2. 当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。
  3. 在初始化参数文件中查询参数log_buffer
  4. 查询语句:SQL > show parameter log_buffer

4. 库高速缓存

库高速缓存存储的是最,近使用过的SQL和PL /SQL语句相关的信息。库高速缓存:

  • 使得共同使用的语句可以共享
  • 可由最近最少使用(LRU)算法来管理
  • 由两种结构组成:
    • 共享SQL区域
    • 共享PL /SQL区域
  • 它的大小由 共享池大小的设置来决定

5. 数据字典高速缓存

数据字典高速缓存是数据库中最近最多使用的定义的集合

  • 它包 括数据库文件、表、索引、列、用户、特权和其它数据库对象的有关信息
  • 在解析阶段,服务器进程查看数据字典,核对信息,以解析对象名,并验证存取
  • 把数据字典信息高速缓存到内存,提高查询响应时间
  • 大小由共享池大小的设置来决定

6. Java池(JAVA POOL)

  1. 存储JAVA命令服务分析要求

  2. 安装和使用JAVA时必须的

  3. 大小有JAVA_POOL_SIZE确定

6. 大型共享池(LARGE POOL)

  1. SGA可选的内存区
  2. 分担了共享池的一部分工作
  3. 用于共享服务器的UGA
  4. 用于I/O服务器进程
  5. 备份和恢复操作或RMAN
  6. 并行执行消息缓冲区(前提PARALLEL_POOL_SIZE=TRUE
  7. 不使用LRU列表
  8. 大小由LARGE_POOL_SIZE确定
ALTER SYSTEM SET LARGE_POOL_SIZE = 64M;

程序全局区

除此之外,还有程序全局区(PGA),是为每一个连接到Oracle数据库的用户进程预留的内存

PGA

1. 用户进程

用户进程是一个程序,它请求与Oracle服务器的连接

  • 它必须首先建立一个连接
  • 它不直接与Oracle服务器进行交互

2. 服务器进程

服务器进程是一个程序,它与Oracle服务器直接作用

  • 它回应用户进程产生的调用。并返回结果
  • 可能是独占的或共享的服务器

3. 后台进程

硬盘和内存之间的关系被保持,并由Oracle的后台进程驱动:

  • 必须的后台进程
DBWnPMONCKPT
LGWRSMONRECO
  • 可选的后台进程
ARCnLMONSnnn
QMNnLMDn
CJQ0Pnnn
LCKnDnnn

1. 数据库写进程(DBWn)

DBWn延迟写入数据文件,直到发生下列事件之一:

  1. 增量或正常检查点
  2. 灰数据缓冲区的数量达到阈值
  3. 进程扫描指定数量的块而无法找到任何空闲缓冲区时
  4. 出现超时
  5. 实时应用集群(Real Application Clusters, RAC)环境中出现ping请求
  6. 使一般表空间或临时表空间处于脱机状态
  7. 使表空间处于只读模式
  8. 删除或截断表
  9. 执行ALTER TABLESPACE表空间名BEGIN BACKUP操作

2. 日志写进程(LGWR)

LGWR在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:

  1. 当提交事务时
  2. 当重做日志缓冲区的三分之一填满时
  3. 当重做日志缓冲区中记录了超过1 MB\2MB的更改时
  4. DBWn将数据库缓冲区高速缓存中修改的块写入数据文件以前
  5. 每隔三秒

3. 系统监控(SMON)

  • 实例恢复
    • 前滚重做日志中的更改
    • 打开数据库供用户访问
    • 回滚未提交的事务处理
  • 每三秒对自由空间的整理
  • 对临时段的清空

4. 进程监控(PMON)

进程失败后,后台进程PMON通过下面的方法进行清理:

  • 回滚用户的当前事务处理
  • 释放当前保留的所有表锁或行锁
  • 释放用户当前保留的其它资源
  • 重新启动已失效(死锁)的调度程序

5. 检查点Checkpoint(CKPT)

  • 在检查点发信号给DBWn
  • 使用检查点信息更新数据文件的标头
  • 使用检查点信息更新控制

启动检查点的原因如下:

  • 确保定期向磁盘写入内存中发生修改的数据块,以便在系统或数据库失败时不会丢失数据
  • 缩短例程恢复所需的时间。只需处理最后一个检查点后面的重做日志条目以启动恢复操作
  • 确保提交的所有数据在关闭期间均已写入数据文件

由CKPT写入的检查点信息包括检查点位置、系统更改号、重做日志中恢复操作的起始位置以及有关日志的信息等等。

注:CKPT并不将数据块写入磁盘,或将重做块写入联机重做日志。

6. 归档日志(ARCn)

  • 可选的后台进程
  • 设置ARCHIVELOG模式时自动归档联机重做日志
  • 保留数据库的全部更改记录

4. QMNn会话内存(SESSION MEMORY)

为保留会话变量以及与该会话相关的其它信息而分配的内存。对于共享服务器环境,该会话是共享的而不是专用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欧恩意

如有帮助,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值