oracle体系构成
温馨提示:
本文最后更新于 2023年12月13日,已超过 528 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
oracle体系构成
1. oracle的物理体系
1.1 oracle的构成
-
实例
- 共享内存区SGA(System Global Area)
- 一系列后台进程,包括PMON,SMON,LCKn,RECO,CKPT,DBWR,LGWR,ARCH等
-
数据库
- 数据文件、参数文件、日志文件、控制文件、归档日志等
-
PGA(Program Global Area) ,也是内存区,和SGA的区别在于,PGA不是共享内存,是私有不共享的
- 用户对数据库发起的查询或其它操作都先在pag进行预处理,然后进入实例区域,由sga和后台进程共同完成
- 预处理包括以下三点
- 报错用户的连接信息,如会话、绑定变量等
- 保存用户权限等信息
- 当发起的指令需要排序的时候,如果在内存区可以放下排序的尺寸就在pga中完成,如果放不下,超出的部分就在临时表空间完成,也就是磁盘中完成
1.2 sql的执行流程
- sql现进入pga,完成用户信息和连接信息的保存,只要会话不断,下次就不用区硬盘读
- 该sql会生成一条唯一的hash值然后带着这个hash值去sga的共享池,先查询该sql是否已经存储过,如果没有就要判断语法是否正确,语义是否正确,是否有权限,在都没问题的情况下生成一个身份证,存储这个hash值。
- 然后开始解析,生成执行计划,并估算执行计划的代价,选择执行代价,并把执行计划和身份证(唯一的hash值)对应在一起
- 然后进入数据缓冲区,根据计划找到对应的数据,如果找不到,就把指令传入数据库中的数据文件
- 如果找到就带会数据缓冲区,传给用户
1.3 后台进程
- 强制不走索引
/*+full(t)*/
- 当一条dml语句在数据缓存区修改完数据后,会启用DBWR进程,完成dml操作的数据从内存刷入到磁盘。
- 日志缓存区保存了数据库相关操作的日志,然后由LGWR进程将其从日志缓存区写入磁盘的日志文件
- 单线程保证顺序
- 每隔三秒运行一次
- 任何COMMIT触发LGWR一次
- DBWR要把数据缓存写入到磁盘,会触发一次
- 日志缓存区满三分之一或记录满1MB,触发一次
- 联机日志文件切换会触发一次
- 当日志文件满了,会启用ARCH进程进行备份,然后再覆盖重写日志文件
- 将缓存区中的数据写入到磁盘的动作是由CKPT来触发的,CKPT触发DBWR写出
- commit不会将缓存写入到磁盘,是由CKPT进程决定的
- 当提交进程崩溃了,会启用PMON进程监视器进程进行回滚,还可以干预后台进程,如RECO LGWR失败了,PMON会中止实例,防止数据错乱
- SMON系统监视器,和PMON不同的是,SMON关注的是系统级操作,而非单个进程重点在于实例恢复,还有清理临时表空间,回滚段表空间,合并空闲空间等。
- LCKn仅用于RAC数据库,最多10个进程,用于实例间的封锁
- RECO用于分布式数据库的恢复,适用于两阶段提交的应用场景。
1.4 启动关闭
- 启动
- startup nomount 读取参数文件pfile 或spfile
- alter database mount 读取控制文件
- alter database open
- 关闭
- shutdown immediate
2.oracle的逻辑体系
1. 逻辑体系构成
逻辑结构分为表空间、段、区、块。一系列连续的block组成了extent,一个或多个extent组成了segment,一个或多个segment组成了tablespace,一个或多个tablespace组成了database,一个database想要存在至少需要SYSTEM及undo表空间。
- 逻辑结构表空间
- 分为系统表空间、回滚表空间、临时表空间、用户表空间
- 区是oracle分配的最小单位
- 块是oracle最小逻辑单位,默认8k
- 数据块又分为
- 数据块头,存储块地址及数据库所属段的类型
- 表目录,只要有一行数据插入块中,就将该行所在表信息存储
- 行目录存储插入行的地址
- 可用空间,即块中的空余空间,通过PCTFREE设置
- 行数据区,存储行的信息或索引
- 数据块又分为
3.表设计
-
表更新日志开销大
-
delete无法释放空间,空快依旧保留。truncate会释放表空间,但是是ddl操作,不能加条件(可以使用分区表)
-
索引回表读开销很大
- 建立联合索引
- 建立索引组织表
-
order by开销大
- 建立索引
- 将表改成有序散列聚簇表
-
减少日志可以使用全局临时表
- 分类
- 基于会话的全局临时表
- 基于事务的全局临时表
- 特性
- 高效删除记录
- 基于事务临时表在commit或者推出session后临时表记录自动删除,基于会话的临时表在退出session后临时表记录自动删除
- 不同会话独立
- 高效删除记录
- 分类
-
分区表
-
分类
-
范围分区
-
列表分区
-
hash分区
-
组合分区
-
-
特性
- 高效的分区消除(逻辑读少)
- 强大的分区操作
- truncate便捷
- 分区数据转移方便
- 分区切割方便
- 分区合并方便
-
正文到此结束
- 本文标签: 数据库
- 本文链接: https://www.yynhworld.cn/article/16
- 版权声明: 本文由御影年华原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权