一句话介绍Oracle的体系结构,Oracle数据库体系结构简单认识一

1、为什么使用数据库软件

为什么我们不直接使用硬盘管理数据而要使用数据库,最主要的原因还是效率问题,直接采取硬盘管理数据的效率远远低于数据库软件,因为数据库软件是把数据加载至内存中进行修改,而硬盘则是需要直接进行大量的IO,非常耗时耗资源,大大拖累系统性能;并且,硬盘的安全系数较之数据库软件较低,相比数据库的备份还原、日志记录、日志挖掘等等防卫手段,硬盘还是存在短缺。

总而言之,使用数据库软件,是由于它的便捷、高效、安全,这也适用于其他优秀的软件产品。

2、Oracle数据库对ACID特性的实现

一个优良的数据库必须能够保证事务的ACID特性,而Oracle则是完美的实现了事务的ACID,简单介绍如下:

(1)原子性(Atomicity):所有操作要么全部成功、要么全部失败,所有操作是一个整体,为此Oracle数据库引入了commit和rollback机制;

(2)一致性(Consistency):查询结果是查询开始时的结果集,与查询耗时及查询结束时刻无关,为此Oracle数据库引入了UNDO机制;

(3)隔离性(Isolation):一个session上做的未提交操作,其他session无法查看,为此Oracle数据库引入了锁机制;

(4)持久性(Durability):在数据库上做的任何有效修改(commit),都会持久保存,不会因为其他因素导致丢失,为此Oracle数据库引入了REDO机制。

3、Oracle数据库高效的体现

在实际生产中,对于数据库最多的操作则是DQL和DML,以DQL语句和DML语句为例,简单描述Oracle数据库的高效体现:

select id ,name from test where id=123;

如上为一条DQL语句,我们知道SELECT语句的工作过程主要分为三个阶段:

(1)​分析阶段

解析阶段主要包含语法分析、语义分析、生成执行计划、权限检查等阶段性​任务。

(2)​执行阶段

执行阶段主要根据执行计划从数据库中获取​所需的结果集,主要是从磁盘上的数据文件中加载数据至内存中,这个过程由Server

Process完成。

(3)​Fetch

Fetch阶段则是把获取的结果集返回给用户。

在实际的生产中,如上的SELECT语句执行频率大、并发性高​,如每次都要进行分析、执行、Fetch,那么会导致非常低下的工作效率。所以,Oracle数据库针对此类型的查询语句做了很多优化。

首先,关于分析阶段的优化如下:

每次进行语义分析,都需要从数据字典中获取数据库对象的定义,而数据字典又存放在操作系统上的磁盘文件中,即SYSTEM表空间下的数据文件中,每次进行语义分析都要将对象定义从磁盘文件加载至内存,高并发场景下拖累性能,而Oracle数据库对此提供了Data

Dictionary

Cache组件,会把第一次语义分析的数据库对象的字典信息缓存在其中,再次对相同的数据对象进行​语义分析时可以直接从Data

Dictionary Cache组件中获取到相关字典信息,大大提升语法分析的效率。

而生成执行计划同样如此,如果可以生成的执行计划缓存在内存中进行保存,则下次执行相同语句时可以直接复用执行计划可以大大提升效率。所以,Oracle数据库提供了Library

Cache组件,用于缓存执行计划。同理,权限等信息同样缓存在Data

Dictionary Cache组件中。

其次,对于执行阶段的优化如下:

根据生成的执行计划,从磁盘文件中获取结果集,需要进行大量的物理IO,需要耗费大量的系统资源,拖慢性能;并且,每次执行都要重复这样的动作,所以,Oracle数据库提供了Database

Buffer

Cache组件提前缓存磁盘中的数据镜像,后续对目的数据的读写可以直接在内存中进行,大大降低了物理IO,提升了系统性能。

最后,对于Fetch阶段,则是:

每个进程都有自己的PGA,即进程全局区,可以在PGA中缓存会话数据,以及辅助排序等,便于结果集的快速返回。

update test set id1=1 and

id2=2 and id3=1;

如上为一条DML语句,同DQL语句相似,DML语句的执行流程仅包括两个阶段:分析阶段和执行阶段。

和DQL语句的流程相似,但是在执行阶段则是存在差异,为了保证数据的持久性和安全性,数据库数据的修改需要记录日志,对每个数据块的修改动作都会被记录到日志文件中,这个过程由Server

Process进程完成。为了防止大量DML产生的海量日志信息造成的巨大的物理IO,Oracle数据库提供了Redo Log

Buffer组件用于缓存数据块修改产生的日志信息,Redo Log

Buffer组件中的日志信息会在特定时机下分批次写入到联机REDO日志文件中,这个过程由LGWR进程完成,大大降低了物理IO。

而​Database Buffer

Cache组件中的数据变更完成后,会在下一次刷检查点时由DBWR进程写入到磁盘文件中,DBWR会触发LGWR先写REDO日志,REDO日志写完后才会进行灰数据的刷盘。

CKPT进程触发DBWR进行灰数据刷盘后,还会更新数据文件头和控制文件中的SCN信息,保持数据的一致性,并且​​在控制文件中记录数据刷盘的位置信息,为故障恢复降低工作量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值