Oracle体系结构与组件
Oracle体系结构和组件
系统的体系结构决定了数据库如何使用内存、硬件和网络,以及哪个进程或程序运行在哪台机器上。
Oracle数据库服务器有两个主要的组成部分:数据库和实例(instance)。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)

共享池包括`库高速缓存`和`数据字典高速缓存`,共享池的主要作用和功能如下:
共享池是对SQL、PL/SQL程序进行语法分析、编译、执行的内存区域。
共享池由库缓存和数据字典缓存组成。
库缓存含有最近执行的SQL、PL/SQL语句的分析码和执行计划;
数据字典缓存含有从数据字典中得到的表、索引、列定义和权限等信息。共享池的大小直接影响数据库的性能。
共享池的大小由初始化参数
shared_pool_size
决定,该参数以KB或MB为单位。默认的大小为8MB。查询语句:
SQL > show parameter shared_pool_size
用如下命令可以调整,参数为
SHARED_POOL_SIZE
:1
2ALTER SYSTEM SET
SHARED_POOL_SIZE = 64M;
2. 数据高速缓冲区(DATABASE BUFFER CACHE)
- 由最近最少使用(LRU)算法来管理
- 用于存储从磁盘数据文件中读入的数据,服务器进程将读入的数据保存在数据缓冲区中,当后续的请求需要这些数据时可以在内存中找到,不再从磁盘读取,提高了读取速度。
- 数据高速缓冲区中存放着Oracle系统最近使用过的数据库数据块。
- 数据缓冲区的大小对数据库的读取速度有直接的影响。
- 数据缓冲区直接由初始化参数文件中的
DB_CACHE_SIZE
参数决定,DB_ CACHE_ ADVICE
能被设置为收集统计量,以预测不同高速缓存的大小调整 DB_BLOCK_SIZE
用于定义标准块的大小- 查询语句:
SQL > show parameter db
- 可以使用
ALTER_SYSTEM
动态调节大小,包括增加或减小
1 |
|
3. 重做日志缓冲区(REDO LOG BUFFER)
- 日志记录数据库的所有修改信息,日志信息首先产生于日志缓冲区。
- 当日志缓冲区的日志数据达到一定数量时,由后台进程将日志数据写入日志文件中。
- 在初始化参数文件中查询参数
log_buffer
。 - 查询语句:
SQL > show parameter log_buffer
4. 库高速缓存
库高速缓存存储的是最,近使用过的SQL和PL /SQL语句相关的信息。库高速缓存:
- 使得共同使用的语句可以共享
- 可由最近最少使用(LRU)算法来管理
- 由两种结构组成:
- 共享SQL区域
- 共享PL /SQL区域
- 它的大小由 共享池大小的设置来决定
5. 数据字典高速缓存
数据字典高速缓存是数据库中最近最多使用的定义的集合
- 它包 括数据库文件、表、索引、列、用户、特权和其它数据库对象的有关信息
- 在解析阶段,服务器进程查看数据字典,核对信息,以解析对象名,并验证存取
- 把数据字典信息高速缓存到内存,提高查询响应时间
- 大小由共享池大小的设置来决定
6. Java池(JAVA POOL)
存储JAVA命令服务分析要求
安装和使用JAVA时必须的
大小有
JAVA_POOL_SIZE
确定
6. 大型共享池(LARGE POOL)
- SGA可选的内存区
- 分担了共享池的一部分工作
- 用于共享服务器的UGA
- 用于I/O服务器进程
- 备份和恢复操作或RMAN
- 并行执行消息缓冲区(前提
PARALLEL_POOL_SIZE=TRUE
) - 不使用LRU列表
- 大小由
LARGE_POOL_SIZE
确定
1 |
|
程序全局区
除此之外,还有程序全局区(PGA),是为每一个连接到Oracle数据库的用户进程预留的内存
1. 用户进程
用户进程是一个程序,它请求与Oracle服务器的连接
- 它必须首先建立一个连接
- 它不直接与Oracle服务器进行交互
2. 服务器进程
服务器进程是一个程序,它与Oracle服务器直接作用
- 它回应用户进程产生的调用。并返回结果
- 可能是独占的或共享的服务器
3. 后台进程
硬盘和内存之间的关系被保持,并由Oracle的后台进程驱动:
- 必须的后台进程
DBWn | PMON | CKPT |
---|---|---|
LGWR | SMON | RECO |
- 可选的后台进程
ARCn | LMON | Snnn |
---|---|---|
QMNn | LMDn | |
CJQ0 | Pnnn | |
LCKn | Dnnn |
1. 数据库写进程(DBWn)
DBWn延迟写入数据文件,直到发生下列事件之一:
- 增量或正常检查点
- 灰数据缓冲区的数量达到阈值
- 进程扫描指定数量的块而无法找到任何空闲缓冲区时
- 出现超时
- 实时应用集群(Real Application Clusters, RAC)环境中出现ping请求
- 使一般表空间或临时表空间处于脱机状态
- 使表空间处于只读模式
- 删除或截断表
- 执行ALTER TABLESPACE表空间名BEGIN BACKUP操作
2. 日志写进程(LGWR)
LGWR在下列情况下执行从重做日志缓冲区到重做日志文件的连续写入:
- 当提交事务时
- 当重做日志缓冲区的
三分之一
填满时 - 当重做日志缓冲区中记录了超过
1 MB\2MB
的更改时 - 在
DBWn
将数据库缓冲区高速缓存中修改的块写入数据文件以前
- 每隔
三秒
3. 系统监控(SMON)
- 实例恢复
- 前滚重做日志中的更改
- 打开数据库供用户访问
- 回滚未提交的事务处理
- 每三秒对自由空间的整理
- 对临时段的清空
4. 进程监控(PMON)
进程失败后,后台进程PMON通过下面的方法进行清理:
- 回滚用户的当前事务处理
- 释放当前保留的所有表锁或行锁
- 释放用户当前保留的其它资源
- 重新启动已失效(死锁)的调度程序
5. 检查点Checkpoint(CKPT)
- 在检查点发信号给DBWn
- 使用检查点信息更新数据文件的标头
- 使用检查点信息更新控制
启动检查点的原因如下:
- 确保定期向磁盘写入内存中发生修改的数据块,以便在系统或数据库失败时不会丢失数据
- 缩短例程恢复所需的时间。只需处理最后一个检查点后面的重做日志条目以启动恢复操作
- 确保提交的所有数据在关闭期间均已写入数据文件
由CKPT写入的检查点信息包括检查点位置、系统更改号、重做日志中恢复操作的起始位置以及有关日志的信息等等。
注:CKPT并不将数据块写入磁盘,或将重做块写入联机重做日志。
6. 归档日志(ARCn)
- 可选的后台进程
- 设置
ARCHIVELOG模式
时自动归档联机重做日志 - 保留数据库的全部更改记录
4. QMNn会话内存(SESSION MEMORY)
为保留会话变量以及与该会话相关的其它信息而分配的内存。对于共享服务器环境,该会话是共享的而不是专用的。