暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle体系架构-想看点什么:Instance

InDataBase 2021-04-26
1055

翻出之前的架构图


这次来详细说说中间黄色的方形 -- Instance(实例)。

Instance是访问Database的方式,由内存和后台进程组成。

我们平时所说的数据库启动,数据库down了,实际说的就是Instance。


关于内存部分,Instance中有三个必要的内存结构:DataBuffer、RedoBuffer、SharePool(图中粉色的方形)。三个必要的内存结构在Instance启动后不能失效,否则Instance就down了。除了这三个必要的内存结构,还有JavaPool、LargePool等。

我们把Instance中的内存部分统称为SGA(System Global Area)。


关于后台进程部分,Instance中有五个必要的后台进程:dbwr、lgwr、ckpt、smon、pmon(图中红色的椭圆)。同样五个后台进行在Instance启动后不能停止,否则Instance也将down掉。除了这五个必要的后台进程,还有归档进程等。


眼见为实,说了半天都是概念,能在数据库中看到才算数。

先说SGA,既然是一组内存结构,对我们来说无非就是都有哪些内存结构、以及内存的大小


show sga命令可以简单直观的看到sga的信息:

Total System Global Area:SGA总共有280M

Fixed Size:固定占用2M

Database Buffers:DataBuffer有134M

Redo Buffers:RedoBuffer有6M

Variable Size:除了Fixed、DataBuffer、RedoBuffer以外的内存结构一共138M


sga没有对Variable中的内存结构进行详细说明,如果想看,使用以下语句:

这次能清楚的看到Variable中包含:Shared Pool、Large Pool、Java Pool、Streams Pool等,以及它们对应内存大小。


DataBuffer:数据缓存,用户获取的数据都是从这里读取的。数据从Datafile中读入DataBuffer,如果对DataBuffer中的数据进行了修改(如执行update),则我们将被修改的数据称为“脏块”。


RedoBuffer:Redo缓存,用户的操作都会在这里进行记录,然后通过后台进行写入RedoFile。


SharePool:主要用于存放SQL解析的相关内容,如执行计划等。这也是Oracle最最核心及复杂的地方了。


接着再来看后台进程:

注意到查询语句中:where paddr <> '00','00'代表未启动的进程。

所以查出的结果为当前系统正在运行中的进程。

DBW0、LGWR、CKPT、SMON、PMON为五个必要进程。

对它们的作用进行一下简单说明。


DBW0:作用是不定期将DataBuffer中的脏块写入DataFile。

“不定期”是为了提高读写效率。Oracle会通过其他功能保证数据的一致性。


为什么不叫“DBWR”,而叫“DBW0”

看下面的查询,可以看出DBWR最多可以配置20个,可配置的数量与主机的CPU相关。


LGWR:将RedoBuffer中的缓存写入RedoFile,触发写的条件有很多:每3秒、RedoBuffer缓存达到1/3、有commit操作等等。

一个数据操作执行后,一定会先写Redo。


CKPT:因为Redofile中的数据要快于Datafile中的数据,CKPT触发后,会让DBWR进程将未写入的Datafile的脏块写入Datafile,以保持Datafile与Redofile一致。如果DBWR写入成功(DBWR为不定期写,所以不一定能写成功),则CKPT把Datafile最终写入的时间更新为当前时间。当异常恢复时,系统将从Datafile最终的写入时间开始恢复。


SMON:回收对象释放的相关资源


PMON:回收进程释放的相关资源


以上就是Instance的主要内容了!

说的都是道听来的,眼见的才算数。


翻翻历史,温故知新

简陋的体系架构图

SQL分组问题

where中不能直接使用需要拆分的参数

冷知识:sys_op_map_nonnull()

开始聊聊“锁”-- 5.Oracle DDL锁的概念

开始聊聊“锁”-- 4.Oracle DML表锁的实验

开始聊聊恶心的“锁”-- 3.Oracle DML表级锁概念

开始聊聊恶心的“锁”-- 2.Oracle DML行级锁概念

开始聊聊恶心的“锁”-- 1.一个故事了解Oracle有哪些锁

死锁与悲观锁、乐观锁不是一类东西

骨灰级科普-Oracle的序列可能不连续

后台翻页必用的rownum,你知道它的处理逻辑吗?

总在面试时被问COUNT(*)、COUNT(1)哪个快?

NVL系与Decode系,他们的差别你了解吗?

骨灰级科普-Oracle中的NULL,神马也不是

SQL也可以不那么简单


文章转载自InDataBase,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论