oracle:运行时结构组成(instance ,后台进程)
来源:互联网 发布:帝国cms标签工具 编辑:程序博客网 时间:2024/06/03 17:07
本篇从内存结构角度来说明oracle的组成。
一个oracle server 由一个oracle实例和一个oracle数据库组成。
即oracle server = oracle Instance +Oracle Database
Oracle 实例
包括内存结构(SGA)和一系列后台进程(background process),两者合起来称为一个oracle实例。
Oracleinstance = sga+background Process
Oracle 内存结构
包含系统全局区(SGA)和程序全局区(PGA)
即oracle memory Structures = SGA +PGA
SGA由服务器和后台进程共享
PGA包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA相反,PGA是只被一个进程使用的区域,PGA在创建进程时分配在终止进程时回收。由服务器进程产生。
下图给出oracle体系结构中主要的组件,本文接下来将对instance中的组件进行介绍:
1 SGA
SGA 是一块巨大的共享内存区域,被看做是oracle数据库的一个大缓冲池,这里的数据可以被oracle的各个进程共用。
SGA = 数据缓冲区 +重做日志缓冲区 +共享池 +大池 + java 池 +池流
系统全局区是动态的,由参数 SGA_MAX_SIZE决定
查看当前系统的SGA大小: show parameter sga_max_size;
修改: alter system set sga_max_sieze=1200m scope=spfile;
因为实例内存分配是在数据库启动时进行的,所以要重启数据库让修改生效。
ASMM,自动内存管理,oracle会自动的对共享池、java池、大池、数据缓冲区、池流进行自动调配。
1.1 共享池(shared pool)
共享池是SGA中最关键的内存片段,特别是在性能和可伸缩性上。
太小的共享池会扼杀性能,太大的共享池会有同样的效果,将会消耗大量的cpu来管理这个共享池。不正确的使用共享池只会带来灾难。共享池主要又可以分为以下2个部分:
1.1.1 Sql语句缓存(Library cache)
用户提交一个sql语句,oracle会将这句sql进行分析(parse),这个过程类似于编译,会耗费相对较多的时间。分析完这个sql,oracle会把他的分析结果给保存在shared pool的library cache中,当数据库第二次执行该sql时,oracle自动跳过这个分析过程,从而减少系统运行的时间。
保存在共享池中sql,可以从v$sqltext, v$sqlarea中查询到,对于编程者来说,尽量提高语句的重用率,减少语句的分析时间。提高sql语句的重用率必须先培养良好的编程习惯,尽量使用bind变量。
1.1.2 数据字典缓冲区(data Dictionary cache)
数据字典缓冲区是oracle特地为数据字典准备的一块缓冲池,供oracle内部使用。
1.2 块缓冲区高速缓存(database buffer cache)
这些缓冲对应所有数据文件中的一些被使用到的数据块,让他们可以在内存中进行操作。在这个级别里,没有系统文件、用户数据文件、临时数据文件、回滚段文件之分。也就是任何文件的数据库都有可能被缓冲。数据库的任何修改都在该缓冲里完成,并由DBWR进程将修改后的数据写入磁盘。
这个缓冲区的块在2个不同的列表中管理:一个是块的‘脏’表(dirty list),需要用数据块的DBWR来写入,另外一个是不脏的块的列表(free list)。一般情况下,是使用最近最少使用算法来管理。
块缓冲去高速缓存又可以分为3个部分(defaultpool, keep pool, recycle poll),如果不是人为设置初始化参数(init.ora),oracle 将默认为default pool。由于操作系统寻址能力的限制,不通过特殊设置,在32位的系统上,块缓冲区高速缓存最大可达到1.7G,64位系统,最大可达到10G。
1.3 重做日志缓冲区(redo log buffer)
重做日志文件的缓冲区,对数据库的任何修改都按顺序被记录在该缓冲,然后由LGWR进程将它写入磁盘。这些修改信息可能是DML语句,如(insert,update,delete)或DDL语句,如(create,alter,drop等)。重做日志缓存区的存在,是因为内存到内存的操作比内存到硬盘的速度快很多。重做日志缓冲区可以加速数据库的操作速度。但是考虑数据库的一致性与可恢复性,数据在重做日志缓冲区的滞留时间不会很长,所以重做日志缓冲区一般都很小。【操作速度和安全性之间需要权衡考虑】
1.4 Java程序缓冲区(java pool)
Java的程序区,oracle在内核中加入了对java的支持,该缓冲区就是为java程序保留的,如果不用java程序没有必要改变该缓冲区的默认大小。
1.5 大池(large pool)
大池的得名不是因为大,而是因为它用来分配大块的内存,处理比共享池更大的内存。
下面对象使用大池:
MTS,在SGA的large pool中分配UGA;
语句的并行查询,允许进程间消息缓冲区的分配,用来协调并行查询服务器;
备份,用于RMAN磁盘IO缓存
2 后台进程(background process)
后台进程是oracle的程序,用来管理数据库的读写,恢复和监视等工作。
Server process 主要是通过他和userprocess进行联系和沟通,并由他和user process进行数据的交换。在unix中,一个oracle后台进程将启动一个操作系统进程;在Windows机器上,我们只能看到一个oracle.exe进程,后台进程是操作系统中的线程。
Unix中,查看后台进程:
Ps -ef|grep ora_
可以看到oracle有5个基本进程:
DBWR(数据文件写入进程)
LGWR(日志文件写入进程)
SMON(系统监护进程)
PMON(用户进程监护进程)
CKPT(检查点进程,同步数据文件,日志文件,控制文件)
2.1 DBWR
将修改过的数据缓冲区的数据写入对应数据文件
维护系统内的空缓冲区
几个错误的说法:
当一个更新提交后,DBWR把数据写到磁盘并返回用户提交完成
DBWR会触发CKPT后台进程
DBWR不会触发LGWR进程
DBWR是一个很底层的工作进程,批量的把缓冲区的数据写入磁盘。和任何前台用户的进程没有什么关系,也不受他们控制。
DBWR工作的主要条件如下:
DBWR超时
系统中没有多的空缓冲区用来存放数据
CKPT进程触发DBWR
2.2 LGWR
将重做日志缓冲区的数据写入重做日志文件,LGWR是一个必须和前台用户进程通信的进程。当数据被修改的时候,系统会产生一个重做日志并记录在重做日志缓冲区内,这个重做日志可以类似看做以下的一个结构:
SCN=000000001000
数据库ID
对象ID=0821
数据行=02
修改后的数据=0011
提交的时候,LGWR必须将被修改的数据的重做日志缓冲区内数据写入日志数据文件,然后再通知前台进程提交成功,并由前台进程通知用户。LGWR承担了维护系统数据完整性的任务。
触发LGWR工作的主要条件:
用户提交
有1/3重做日志缓冲区未被写入磁盘
有大于1M重做日志缓冲区未被写入磁盘
超时
DBWR需要写入的数据的SCN号大于LGWR记录的SCN号,DBWR触发LGWR写入
2.3 SMON
主要工作:
清除临时空间
在系统启动时,完成系统实例恢复
聚结空闲空间
从不可用的文件中恢复事物的活动
OPS中失败节点的实例恢复
清除OBJ$表
缩减回滚段
使回滚段脱机
2.4 PMON
主要用于清除失效的用户进程,释放用户进程所用的资源。如 PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源。
2.5 CKPT
同步数据文件,日志文件和控制文件。由于DBWR/LGWR的工作原理,造成了数据文件,日志文件,控制文件的不一致,这需要CKPT进程来同步。CKPT会更新数据文件/控制文件的头信息。
触发CKPT工作的主要条件:
在日志切换的时候
数据库用immediate,transaction,normal选项shutdown数据库的时候
根据初始化文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET的设置的数值来确定
用户触发
2.6 ARCH(需手工配置)
当数据库以归档方式运行的时候,oracle会启动ARCH进程,当重做日志文件被写满时,日志文件进行切换,旧的重做日志文件就被ARCH进程复制到一个/多个特定的目录/远程机器,这些被复制的重做日志文件叫做归档日志文件。
2.7 Reco(需手工配置)
负责解决分布事务中的故障,oracle可以连接远程的多个数据库,当由于网络问题,有些事物处于悬而未决的状态。Reco进程试图建立与远程服务器的通信,当故障消除后,reco进程自动解决所有悬而未决的会话。
2.8 服务进程(server process)
服务进程的分类:
专用服务进程(dedicatedserver process):一个服务进程对于一个用户进程
共享服务进程(sharedserver process):一个服务进程对于多个用户进程,轮流为用户进程服务。
PGA:process Global Area
UGA: user global Area,保存了用户的变量,权限,堆栈,排序空间等用户信息
对于专用服务器进程,UGA在PGA中分配
对于共享服务进程,UGA在Large pool分配
2.9 用户进程(user process)
在客户端,将用户的sal语句传递给服务进程
3 SCN(system change number)
一个贯穿数据库全局的概念,系统改变号SCN
一个由系统内部维护的序列号,当系统需要更新的时候自动增加,它是系统中维持数据的一致性和顺序恢复的重要标志。
查询语句不会使SCN增加,同时发生的更新,数据库内部对应的SCN也是不同的,这样就保证了数据恢复时的顺序,维持数据的一致性。
4 参考资料
Oracle体系结构详细图解
http://blog.csdn.net/mengxiangfeiyang/article/details/7841653
Oracle实例和Oracle数据库(Oracle体系结构)
http://blog.csdn.net/leshami/article/details/5529239
oracle 体系结构
http://blog.csdn.net/wanghai__/article/details/4683983
- oracle:运行时结构组成(instance ,后台进程)
- Oracle后台进程结构简介
- Oracle--数据库体系结构(物理结构、逻辑结构、内存结构及后台进程)
- 计算机虚拟机运行原理(结构组成)
- 关于Oracle进程结构及后台进程简介
- 关于Oracle进程结构及后台进程简介
- 后台运行进程(background job)
- Linux 后台运行进程
- Linux后台运行进程
- linux进程后台运行
- ubuntu后台运行进程
- 关于hudson server运行testcase时浏览器进程后台运行
- oracle 后台进程(CKPT详解)
- oracle后台进程
- oracle后台进程详解、
- oracle 后台进程
- 查看oracle后台进程
- oracle 常见后台进程
- linux 中的eclipse安装maven
- 从0开始玩安全--Python篇--Python入门指导 & 案例Unixshadow密码破解
- ActionBar的使用问题
- Java - PAT - 1004. 成绩排名 (20)
- linux的文件系统
- oracle:运行时结构组成(instance ,后台进程)
- ADO.NET之查询结果转换如性别
- Unable to create/open lock file: /data/mongod.lock解决方法
- C++ 多态 polymorphic 编译时期多态
- 数据结构之二叉排序树
- IOS Dev Intro - Raw Bitmap Modification
- windows,mac 和linux 以及unix
- VNC、VPN等几个基本概念
- sublime test3 安装quick-cocos2d-x 代码补全插件