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

目录

  • 前言
  • 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算法管理:它的原理是把经常使用的数据保留在池中,不经常使用的数据就退回去。ide


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


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


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


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 数据库 体系结构 (二):服务器结构

太多的理论,还须要用图来理解记忆!因此总结就用一张图来表示。

相关文章
相关标签/搜索