oracle——体系结构概念

实例/instance: 进程+共享内存 用于管理和控制数据库
== 数据库/database: 物理文件的集合 为实例提供数据==,如数据文件,控制文件,参数文件,日志文件等
== 数据库服务器/database server: 实例+数据库==
实例:oracle数据库启动后首先在内存中划分一片空间,并启动一些进程,而内存和进程统称oracle数据库实例。
==连接/connection:连接是从客户端到(服务器)==Oracle 实例的一条物理路径。
会话/session:会话是实例中存在的一个逻辑实体。
连接就是客户端进程到服务端进程的事,会话是用户到登陆数据库
进程/process:指定了一个实例在操作系统级别能同时运行的进程数,包括后台进程与服务器进程。

oracle的体系结构主要分三类

概览: 内存结构
进程结构
存储结构

一.内存结构

(1) SGA: 系统/共享全局区
(Shared Pool/共享池
Buffer Cache/数据库缓冲区高速缓存
Redo Log Buffer/重做日志缓冲区
Large Pool/大池
Java Pool/JAVA池
Stream Pool/流池) 重点1!!!面试


(2) PGA: 进程/私有全局区
Private SQL area
Session memory

amm 自动内存管理
asm 自动存储管理

具体分析
Shared Pool 实现代码的共享和重用
== Shared pool 作用 ==
(1) 将 sql 语句解析成执行计划
(2) 对执行计划进行执行,读取数据
(3) 将读取到的数据返回给客户端

包含三部分:
1.==库缓存(Library Cache):用于缓存 SQL 语句和执行计划 ==
用于存储SQL语句及相关的解析,执行计划,PL/SQL程序块等
共享SQL区
存放语法分析结果和执行计划等
私有SQL区
存放绑定变量,环境和会话信息等

2.数据字典缓存(Data Dictionary Cache)
存放数据字典信息,包括表、视图等对象的结构信息,用户以及对象权限信息,按行(row)存储,所以也叫Row Cache

3.结果集(Result Cache)
缓存查询的结果,可以在服务器端缓存,也可以在客户端缓存
内存结构和进程结构
Database Buffer Cache
服务器进程,针对每一个连接启动一个服务器进程
数据在buffer cache,如果没有,就找dbf/数据文件
== server process读取数据
dbw将修改后的数据写入数据文件==
缓冲区状态:
已连接:正在进行读/写的瞬间
干净: 数据文件和内存中一致,该内存可以重用
空闲: 未使用的内存空间,该内存可以重用
== 脏: 内存中的数据发生了修改,需要写回dbf dirty block==
如果没有空闲和干净的内存空间,则触发dbwn

Redo Log Buffer(重做日志缓冲区)
== buffer cache中的数据一旦有修改就会产生该日志
log buffer通过LGWR写入到redo log中,写满后会进行切换
== ARCn将redo log归档到归档日志==

Large Pool
RMAN备份恢复的时候
执行并行查询的时候
执行大量排序操作的时候
共享服务器的时候

Java Pool
存储过程可以使用java写
数据库内部存在jvm

Streams Pool
由Oracle Streams使用

PGA 进程/私有全局区

作用:
PGA是服务器进程使用的内存空间,后台进程也有PGA
在PGA中进行数据排序
PGA只有服务器进程可以访问,独享内存空间
PGA和服务器进程是关键点

构成:
1、private SQL area
静态区: 会话结束释放
动态区: sql执行结束释放
2、Session Memory
3、SQL Work Areas(主要)
1、sort_area_size 排序空间大小
2、sort_area_retained_size 排序空间释放到的最小空间大小
3、hash_area_size 多表访问需要哈希空间
4、hash_join_enable 哈希空间相关
5、bitmap_merge_area_size 位图区
6、create_bitmap_area_size 位图区创建
7、open_cursors 一个会话可以执行的SQL的数量
8、_pga_max_size 每一个会话能分配的最大的PGA大小
内存结构

内存管理形式
自动内存管理
自动SGA管理
手工SGA管理
自动PGA管理
手动PGA管理

手动指定空间时,如果在排序时需要的排序空间不够时,服务器进程会在临时数据文件上拿到空间再进行排序,在PGA中的排序叫内存排序,在临时数据文件中的排序叫磁盘排序,如果一次磁盘排序不够,还需要多次排序。

二.存储结构简述

(1)物理存储结构
控制文件
日志文件
数据文件
参数文件
密码文件
(2) 逻辑存储结构
表空间


分析

存储结构具体分析

逻辑结构

== 段、区、块==
Segments/Extents/DataBlocks
从存储的角度只有段
记录到数据字典
创建段

表空间 tablespace
==表空间是数据库的最大逻辑存储结构,主要存放的是表, 所以称作表空间,==和物理数据文件相对应,一个表空间可以由多个数据文件组成,一个数据文件只能属于一个表空间

SYSAUX: 系统辅助表空间,由ORACLE自行维护
UNDO: 存放撤销信息的表空间

USERS; 建议用户使用的表空间,scott用户的表就在这个表空间上
建议:不同应用系统存放在不同的表空间上,不同的表空间的文件放在不同的磁盘上,减少并发,提高性能。

== 段 一个独立的逻辑存储结构,用于存储表、索引或簇等占用空间的对象,一个段只能属于一个数据库对象==
有以下几种段:
数据段
数据段存放的是数据表中的数据,数据段的增大时向数据段增加区,创建表时,系统自动创建一个同名的段
索引段
包含了用于提高系统性能的索引,一旦建立索引,系统自动创建一个同名的索引段
回滚段
也叫撤销段,该段保存了回滚的条目,oracle将修改前的旧数据存放在回滚段中,利用这个,可以撤销未提交的操作
临时段
当执行创建索引、查询等操作时,系统会使用一些临时空间用来保存解析过的查询语句以及在排序过程中产生的临时数据
== 区 段空间分配时最小的单位,由连续的数据块组成
块 组成区的最小单位==,通常是操作系统数据块的整数倍,ORACLE支持同时使用多种大小

块组成部分:
块头 存放数据块的基本信息,如块的物理地址,块所属段的类型
表目录 如果是数据表,存放数据表的相关信息
行目录 如果有行数据,那么存储行信息
空余空间 新行插入和存在行的更新
行数据 存放表数据和索引数据

表空间: 大于数据文件的逻辑概念

分类:
== 基本表空间: 一般为用户使用的永久性表空间,存储用户永久性数据==
== 临时表空间: 临时表空间是一个磁盘空间,存储用户在执行ORDER BY等语句进行排序或汇总时产生的临时数据==,默认情况下所有用户都使用temp作为默认的临时表空间,也允许使用其他临时表空间作为默认临时表空间,需要在创建用户时指定
大文件表空间: 存储大型数据
非标准数据块表空间:在一个实例中创建数据库大小不同的表空间
撤销表空间:存储事务的撤销数据,在数据恢复时使用,一个数据库中可以有多个撤销表空间,但是数据库一次只能使用一个,默认使用自动创建的undotbs撤销表空间。

默认:
== SYSTEM: 数据字典
SYSAUX: 辅助系统表空间
UNDOTBS1: UNDO回滚段,存储修改前的数据
TEMP: 临时表空间,会话使用

USERS:

状态属性:
ONLINE: 在线,允许访问该表空间中的数据
OFFLINE: 离线,不允许访问该表空间的数据
== READ ONLY: 只读,只允许读
必须处于ONLINE状态==
== 不能包含任何事务的回滚段==
不能处于在线备份期间
READ WRITE: 读写,可以读写
必须处于ONLINE状态

段管理
== 使用自动段管理,使用位图进行管理

区管理
区管理方法为每个表空间设置,应用于表空间中的所有段,可使用字典管理或者本地管理
,但是请不要使用字典管理。
字典管理:
使用两张表对区进行管理
== 本地管理:
使用位图来管理区==

三.进程结构

服务器进程(前台进程): Server Process读取数据==
后台进程:
DBWn/数据库写进程 n代表一个数字 0 dbw0 dbw1 dbw2
== LGWR/日志写进程==
== ARCn/归档写进程==
SMON/系统监视器
PMON/进程监视器
RECO/恢复进程
CKPT/检查点进程 check point

分析

生产环境中,前台进程远远多于后台进程

后台进程
== DBWn: 将buffer cache中的脏数据写入到dbf中,只写不读。 server process读取数据==

执行时间点:
没有任何可用缓冲区
脏缓冲区过多
三秒超时
遇到检查点
LGWR(日志写进程): 将log buffer中的数据写入到redo log中。
LGWR触发条件:
1、用户提交
2、有三分之一的log buffer未被写入磁盘
3、有大于1M的log buffer未被写入磁盘
4、每隔三秒
5、DBWn需要写入的数据的SCN大于LGWR记录的SCN,触发LGWR写入,日志写入优先(Write-Ahead-Log)

CKPT(检查点进程): 周期性触发,更新检查点信息,更新到控制文件和每个数据文件头部。
检查点类型
完全检查点
执行ALTER SYSTEM CHECKPOINT
正常关闭实例
增量检查点

检查点队列
该队列是脏数据块所对应的buffer header,dbwn按照这个写

SMON(系统监视器):== 主内,监控实例内部,实例恢复,如整理碎片,清理不使用的临时段。
PMON(进程监视器):
主外,监控用户连接==
在用户进程失败时执行进程恢复
清除数据库缓冲区高速缓存
释放该用户进程使用的资源
监视会话是否发生空闲会话超时
将数据库服务动态注册到监听程序
ARCn(归档写进程): 将写满后的redo log写入到归档日志中。
可以收集事物处理重做数据,并将该数据传输到备用目标位置

MMON: 自我监视和自我管理支持进程
MMNL: MMON辅助进程,
ADDM: 自动数据库诊断监视器
MMAN: 自动内存管理
LREG: 监听注册进程

前台进程
服务器进程
应用程序服务器产生到数据库服务器的连接,多个连接形成一个连接池。
用户的信息到达应用程序服务器后,由应用程序服务器随机选择连接到达数据库服务器,执行完成后,把执行结果返回给用户。

用户进程
用户客户端产生的进程,我们不关心。

数据库的几类文件

CONTROL FILE 控制文件 在线
DATA FILE 数据文件 在线
REDO LOG FILE 重做日志文件 在线
PARAMETER FILE 参数文件 在线==

ARCHIVE LOG FILE 归档日志文件 离线
PASSWORD FILE 密码文件 离线
alert file 告警文件
trace file 追踪文件

在线文件 文件实时改变,不能进行操作
离线文件 文件生成后不会改变
安全:
复用:一个不行就两个
分散:一个地方不保险就整两个地方

control file

作用:
用于记录数据库的物理结构,属于重要角色,没有控制文件,实例立即崩溃,数据库的启动和正常运行都离不开控制文件。
包含的内容:
数据库物理结构信息
数据库归档历史信息
各个数据文件的SCN号和系统检查点信息
RMAN元数据

性质:
控制文件是一个二进制文件,不可以通过文本编辑器编辑,该文件由oracle自行维护,oracle建议至少有两份冗余,并且放在不同的磁盘上。 raid 存储设备, , 双控双电

数据文件:

作用:
== 用来存储实际数据,数据文件是存储数据的物理概念==。
数据文件的状态
ONLINE: 联机状态
OFFLINE: 脱机状态
OFFLINE DROP: 删除数据文件将数据文件OFFLINE时,不影响表空间的状态,但是表空间的状态会影响到数据文件的状态。

发布了47 篇原创文章 · 获赞 11 · 访问量 2202

猜你喜欢

转载自blog.csdn.net/qq_45630589/article/details/104317861