- 前言
- Oracle 内存结构
- Oracle 进程结构
- 文章总结
- 上一篇文章体现了 Oracle 数据库的一些基本结构和存储结构,这篇文章将会讲到Oracle的服务器结构,实际上就是主要讲实例的结构。需要把这些底层的结构了解,在生产环境或是对Oracle才会有一些了解。
- Oracle服务器是由Oracle实例+Oracle数据库组成。
- Oracle实例是有SGA+后台进程组成。 每一个Oracle实例都有自己的SGA和独立的Oracle进程集。
以上图很好说明了内存的结构,下面将会详细介绍内存结构。
成都创新互联-专业网站定制、快速模板网站建设、高性价比贵德网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式贵德网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖贵德地区。费用合理售后完善,十多年实体公司更值得信赖。
内存结构是Oracle数据库体系中最为重要的一部分,数据库实例启动时,Oracle数据库会分配内存区并启动后台进程。
Oracle内存存储的主要内容有:
- 程序代码(PL/SQL、Java);
- 关于已经链接的会话的信息,包括当前所有活动非活动的会话;
- 程序运行时必须的相关信息,如查询计划;
- Oracle 进程之间的通信和共享的信息,如:锁。
1·系统全局区 (SGA):Oracle启动实例时分配系统全局区
2·程序全局去 (PGA):当服务器启动时分配程序全局区
3·用户全局区 (UGA):用户全局区为用户存储会话状态
系统全局区 (SGA):数据库信息存储于系统全局区,由多个数据库共享。是占用服务器内存最大的一个区域,是影响数据库最重要的一个指标,和后台进程组成了Oracle实例。
系统全局区 (SGA)的组成:
* 共享池 (含:库高速缓存、数据高速字典缓存);
* 数据高速缓存;
* 重做日志缓冲区;
* Java池;
* 大缓冲区。
共享池:是对SQL、PLSQL程序进程语法分析、编译、执行的内存区域。是由两个关键内存结构组成,分别是:
1·库高速缓存:存储最近解析使用的 SQL和PL/SQL语句信息。Oracle 在执行用户进程提交的各种SQL语句前要对进行解析(包括语法解析、对象确认、权限判断、操作优化等)并生产执行计划,占用一定的系统资源。
2·数据字典高速缓存:最近使用对象定义的集合,包括数据文件、表、索引、列、用户、权限、和数据库对象的信息。
数据高速缓存区:可以加快访问速度,把一些经常用到的都放到缓存区,因为数据库的目的除了安全还有就是访问效率。服务器进程将读入的数据保存在数据缓冲区中,当后续请求需要这些数据就在内存中找到,不需要从磁盘读取。所有用户共享。由三个池组成:1·默认池, 2·保持池(存放常用的数据) 3·回收池(存放不常使用的数据存),通过LRU算法管理。
LRU算法管理:它的原理是把常用的数据保留在池中,不常用的数据就退回去。
重做日志缓冲区:录所有的关于数据库的变化,当执行DML,如:updata、delete、insert或create、alter、drop等语句时,Oracle都会为这些操作生产重做记录,作用是:主要用于数据库恢复、改变的数据都要依赖于redo日志条目。
大缓冲区:用于需要大内存操作提供相对独立的内存空间,以便提高性能,大池是可选的内存结构,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
当服务器启动时分配的全局区,就是Oracle服务器启动时需要占用的内存!
- 它包含单个服务器进程所需的数据和控制信息
- 是在用户进程连接到数据库并创建一个会话时自动分配的,保持每个与Oracle数据库连接的用户进程所需的信息
- PGA为非共享区,只能单个进程使用,当一个用户会话结束,PGA释放。
- 用户进程存储会话状态,就是你用哪个用户登陆,会存储一些用户的状态!
- UGA可以作为PGA于SGA的一部分,具体位子取决于如何连接Oracle:若通过一个共享服务器连接,UGA包含在SGA中;若是通过一个专有服务器连接Oracle,UGA包含在专有服务器PGA中
Oracle 实例有以下几种进程:
* 用户进程
* 服务器进程
* 后台进程
用户进程是一个需要与Oracle服务器进行交互的程序。当用户运行一个程序准备向数据库服务器发送请求时,即创建了用户进程!
服务器进程是用于处理连接该实例的用户进程的请求。当用户连接到Oracle实例创建会话时,创建的服务器进程!
- 后台进程是Oracle数据库为了保持系统最佳系统性能和协调多个用户请求而设置的。Oracle实例启动时则创建一系列的后台进程!
- 后台进程使数据库的内存结构和数据库物理结构之间协调工作。
- 后台进程必须启动的5个进程分别是:DBWR、LGWR、PMON、SMON、CKPT。
PMON 进程监控进程:
* 清理出现故障的进程;
* 释放当前所有挂载的锁定;
* 释放故障进程使用的资源。
SMON 系统监控进程:
* 在实例失败后,重新打开数据库时自动恢复实例;
* 整理数据文件的自由空间,将相邻空间结合起来;
* 释放不再使用的临时段。
DBWR 数据写入进程:
* 管理数据缓冲区,将最近使用过的块保留在内存中;
* 将修改后的缓冲区数据写入数据文件中。
LGWR 日志写入进程:
* 负责将日志缓冲区的日志数据写入日志文件;
* 系统有多个日志文件,该进程以循环的方式将数据写入文件。
CKPT 校验进程:
* 从检查点队列上扫描脏数据块,并将这些脏数据块写入数据文件中;
* 检查点队列上的buffer header 是按照数据块第一次被脏的时间先后顺序来排列的;
* 越早修改的数据块的buffer header排在越前面;
* 同时如果一个数据块被修改了多次的话,在该链表上也只出现一次。
太多的理论,还需要用图来理解记忆!所以总结就用一张图来表示。