温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Oracle 数据库 体系结构 (二):服务器结构

发布时间:2020-04-06 22:48:57 来源:网络 阅读:979 作者:安享落幕 栏目:关系型数据库

目录

  • 前言
  • Oracle 内存结构
  • Oracle 进程结构
  • 文章总结

前言

  • 上一篇文章体现了 Oracle 数据库的一些基本结构和存储结构,这篇文章将会讲到Oracle的服务器结构,实际上就是主要讲实例的结构。需要把这些底层的结构了解,在生产环境或是对Oracle才会有一些了解。
  • Oracle服务器是由Oracle实例+Oracle数据库组成。
  • Oracle实例是有SGA+后台进程组成。 每一个Oracle实例都有自己的SGA和独立的Oracle进程集。

Oracle 内存结构

Oracle 数据库 体系结构 (二):服务器结构
以上图很好说明了内存的结构,下面将会详细介绍内存结构。


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

  • 程序代码(PL/SQL、Java);
  • 关于已经链接的会话的信息,包括当前所有活动非活动的会话;
  • 程序运行时必须的相关信息,如查询计划;
  • Oracle 进程之间的通信和共享的信息,如:锁。

Oracle内存结构包含:

1·系统全局区 (SGA):Oracle启动实例时分配系统全局区
2·程序全局去 (PGA):当服务器启动时分配程序全局区
3·用户全局区 (UGA):用户全局区为用户存储会话状态

Oracle 数据库 体系结构 (二):服务器结构

系统全局区(SGA)

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

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

* 共享池 (含:库高速缓存、数据高速字典缓存);
* 数据高速缓存;
* 重做日志缓冲区;
* Java池;
* 大缓冲区。

Oracle 数据库 体系结构 (二):服务器结构

共享池:是对SQL、PLSQL程序进程语法分析、编译、执行的内存区域。是由两个关键内存结构组成,分别是:
1·库高速缓存:存储最近解析使用的 SQL和PL/SQL语句信息。Oracle 在执行用户进程提交的各种SQL语句前要对进行解析(包括语法解析、对象确认、权限判断、操作优化等)并生产执行计划,占用一定的系统资源。
2·数据字典高速缓存:最近使用对象定义的集合,包括数据文件、表、索引、列、用户、权限、和数据库对象的信息。


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


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


大缓冲区:用于需要大内存操作提供相对独立的内存空间,以便提高性能,大池是可选的内存结构,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 实例有以下几种进程:

* 用户进程
* 服务器进程
* 后台进程

Oracle 数据库 体系结构 (二):服务器结构


用户进程

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

服务器进程

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

后台进程

  • 后台进程是Oracle数据库为了保持系统最佳系统性能和协调多个用户请求而设置的。Oracle实例启动时则创建一系列的后台进程!
  • 后台进程使数据库的内存结构和数据库物理结构之间协调工作。
    Oracle 数据库 体系结构 (二):服务器结构
  • 后台进程必须启动的5个进程分别是:DBWR、LGWR、PMON、SMON、CKPT。

PMON 进程监控进程:

* 清理出现故障的进程;
* 释放当前所有挂载的锁定;
* 释放故障进程使用的资源。

SMON 系统监控进程:

* 在实例失败后,重新打开数据库时自动恢复实例;
* 整理数据文件的自由空间,将相邻空间结合起来;
* 释放不再使用的临时段。

DBWR 数据写入进程:

* 管理数据缓冲区,将最近使用过的块保留在内存中;
* 将修改后的缓冲区数据写入数据文件中。

LGWR 日志写入进程:

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

CKPT 校验进程:

* 从检查点队列上扫描脏数据块,并将这些脏数据块写入数据文件中;
* 检查点队列上的buffer header 是按照数据块第一次被脏的时间先后顺序来排列的;
* 越早修改的数据块的buffer header排在越前面;
* 同时如果一个数据块被修改了多次的话,在该链表上也只出现一次。

总结

Oracle 数据库 体系结构 (二):服务器结构

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI