oracle服务器的两大组成,Oracle 数据库 体系结构 (二):服务器结构

目录

前言

Oracle 内存结构

Oracle 进程结构

文章总结

前言

上一篇文章体现了 Oracle 数据库的一些基本结构和存储结构,这篇文章将会讲到Oracle的服务器结构,实际上就是主要讲实例的结构。需要把这些底层的结构了解,在生产环境或是对Oracle才会有一些了解。

Oracle服务器是由Oracle实例+Oracle数据库组成。

Oracle实例是有SGA+后台进程组成。 每一个Oracle实例都有自己的SGA和独立的Oracle进程集。

Oracle 内存结构

1a6c29f714339603cdaf8cba325185e5.png

以上图很好说明了内存的结构,下面将会详细介绍内存结构。

内存结构是Oracle数据库体系中最为重要的一部分,数据库实例启动时,Oracle数据库会分配内存区并启动后台进程。

Oracle内存存储的主要内容有:

程序代码(PL/SQL、Java);

关于已经链接的会话的信息,包括当前所有活动非活动的会话;

程序运行时必须的相关信息,如查询计划;

Oracle 进程之间的通信和共享的信息,如:锁。

Oracle内存结构包含:

1·系统全局区 (SGA):Oracle启动实例时分配系统全局区

2·程序全局去 (PGA):当服务器启动时分配程序全局区

3·用户全局区 (UGA):用户全局区为用户存储会话状态

2cc7d54255c3a4af86e40104db8f8b78.png

系统全局区(SGA)

系统全局区 (SGA):数据库信息存储于系统全局区,由多个数据库共享。是占用服务器内存最大的一个区域,是影响数据库最重要的一个指标,和后台进程组成了Oracle实例。

系统全局区 (SGA)的组成:

* 共享池 (含:库高速缓存、数据高速字典缓存);

* 数据高速缓存;

* 重做日志缓冲区;

* Java池;

* 大缓冲区。

1020c6e9efb3c02a2dd5ee98bdc6648d.png

共享池:是对SQL、PLSQL程序进程语法分析、编译、执行的内存区域。是由两个关键内存结构组成,分别是:

1·库高速缓存:存储最近解析使用的 SQL和PL/SQL语句信息。Oracle 在执行用户进程提交的各种SQL语句前要对进行解析(包括语法解析、对象确认、权限判断、操作优化等)并生产执行计划,占用一定的系统资源。

2·数据字典高速缓存:最近使用对象定义的集合,包括数据文件、表、索引、列、用户、权限、和数据库对象的信息。

数据高速缓存区:可以加快访问速度,把一些经常用到的都放到缓存区,因为数据库的目的除了安全还有就是访问效率。服务器进程将读入的数据保存在数据缓冲区中,当后续请求需要这些数据就在内存中找到,不需要从磁盘读取。所有用户共享。由三个池组成:1·默认池, 2·保持池(存放常用的数据) 3·回收池(存放不常使用的数据存),通过LRU算法管理。

LRU算法管理:它的原理是把常用的数据保留在池中,不常用的数据就退回去。

重做日志缓冲区:录所有的关于数据库的变化,当执行DML,如:updata、delete、insert或create、alter、drop等语句时,Oracle都会为这些操作生产重做记录,作用是:主要用于数据库恢复、改变的数据都要依赖于redo日志条目。

8383d7f794b17e1e7356a5d991084c27.png

大缓冲区:用于需要大内存操作提供相对独立的内存空间,以便提高性能,大池是可选的内存结构,DBA可以决定是否需要在SGA中创建大池,比如:数据库备份和恢复、大量排序的SQL语句、并行化的数据库操作。

Java池:在安装Java程序时必须设置Java池,编译Java语言写的指令。

SQL> show sga; ----------------(查看 系统全局区 SGA 大小)

Total System Global Area 1593835520 bytes

Fixed Size 8793256 bytes

Variable Size 905970520 bytes

Database Buffers 671088640 bytes

Redo Buffers 7983104 bytes

程序全局区(PGA)

当服务器启动时分配的全局区,就是Oracle服务器启动时需要占用的内存!

它包含单个服务器进程所需的数据和控制信息

是在用户进程连接到数据库并创建一个会话时自动分配的,保持每个与Oracle数据库连接的用户进程所需的信息

PGA为非共享区,只能单个进程使用,当一个用户会话结束,PGA释放。

用户全局区(UGA)

用户进程存储会话状态,就是你用哪个用户登陆,会存储一些用户的状态!

UGA可以作为PGA于SGA的一部分,具体位子取决于如何连接Oracle:若通过一个共享服务器连接,UGA包含在SGA中;若是通过一个专有服务器连接Oracle,UGA包含在专有服务器PGA中

Oracle 进程结构

Oracle 实例有以下几种进程:

* 用户进程

* 服务器进程

* 后台进程

d4d8812f83ff479394bf5d4d9997e879.png

用户进程

用户进程是一个需要与Oracle服务器进行交互的程序。当用户运行一个程序准备向数据库服务器发送请求时,即创建了用户进程!

服务器进程

服务器进程是用于处理连接该实例的用户进程的请求。当用户连接到Oracle实例创建会话时,创建的服务器进程!

后台进程

后台进程是Oracle数据库为了保持系统最佳系统性能和协调多个用户请求而设置的。Oracle实例启动时则创建一系列的后台进程!

后台进程使数据库的内存结构和数据库物理结构之间协调工作。

b63e616b625f0dede344ef5340503542.png

后台进程必须启动的5个进程分别是:DBWR、LGWR、PMON、SMON、CKPT。

PMON 进程监控进程:

* 清理出现故障的进程;

* 释放当前所有挂载的锁定;

* 释放故障进程使用的资源。

SMON 系统监控进程:

* 在实例失败后,重新打开数据库时自动恢复实例;

* 整理数据文件的自由空间,将相邻空间结合起来;

* 释放不再使用的临时段。

DBWR 数据写入进程:

* 管理数据缓冲区,将最近使用过的块保留在内存中;

* 将修改后的缓冲区数据写入数据文件中。

LGWR 日志写入进程:

* 负责将日志缓冲区的日志数据写入日志文件;

* 系统有多个日志文件,该进程以循环的方式将数据写入文件。

CKPT 校验进程:

* 从检查点队列上扫描脏数据块,并将这些脏数据块写入数据文件中;

* 检查点队列上的buffer header 是按照数据块第一次被脏的时间先后顺序来排列的;

* 越早修改的数据块的buffer header排在越前面;

* 同时如果一个数据块被修改了多次的话,在该链表上也只出现一次。

总结

16a47a346407011416c92980e7186234.png

太多的理论,还需要用图来理解记忆!所以总结就用一张图来表示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值