- 前言
- Oracle 内存结构
- Oracle 进程结构
- 文章总结
前言
Oracle 内存结构
以上图很好说明了内存的结构,下面将会详细介绍内存结构。
内存结构是Oracle数据库体系中最为重要的一部分,数据库实例启动时,Oracle数据库会分配内存区并启动后台进程。
Oracle内存存储的主要内容有:
Oracle内存结构包含:
1·系统全局区 (SGA):Oracle启动实例时分配系统全局区 2·程序全局去 (PGA):当服务器启动时分配程序全局区 3·用户全局区 (UGA):用户全局区为用户存储会话状态
系统全局区(SGA)
系统全局区 (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
程序全局区(PGA)
当服务器启动时分配的全局区,就是Oracle服务器启动时需要占用的内存!
用户全局区(UGA)
Oracle 进程结构
Oracle 实例有以下几种进程:
* 用户进程 * 服务器进程 * 后台进程
用户进程
用户进程是一个需要与Oracle服务器进行交互的程序。当用户运行一个程序准备向数据库服务器发送请求时,即创建了用户进程!
服务器进程
后台进程
PMON 进程监控进程:
* 清理出现故障的进程; * 释放当前所有挂载的锁定; * 释放故障进程使用的资源。
SMON 系统监控进程:
* 在实例失败后,重新打开数据库时自动恢复实例; * 整理数据文件的自由空间,将相邻空间结合起来; * 释放不再使用的临时段。
DBWR 数据写入进程:
* 管理数据缓冲区,将最近使用过的块保留在内存中; * 将修改后的缓冲区数据写入数据文件中。
LGWR 日志写入进程:
* 负责将日志缓冲区的日志数据写入日志文件; * 系统有多个日志文件,该进程以循环的方式将数据写入文件。
CKPT 校验进程:
* 从检查点队列上扫描脏数据块,并将这些脏数据块写入数据文件中; * 检查点队列上的buffer header 是按照数据块第一次被脏的时间先后顺序来排列的; * 越早修改的数据块的buffer header排在越前面; * 同时如果一个数据块被修改了多次的话,在该链表上也只出现一次。
总结
太多的理论,还需要用图来理解记忆!所以总结就用一张图来表示。