1.前言
前面主要讲解share pool以及database buffer cache,接下来继续进行说SGA中其它的组件
2.redo buffer cache
redo log buffer中主要存储的是数据库产生的redo数据,它主要以日志条目(redo entries)方式记录了数据库的所有修改信息(包括DML和DDL),目的是为数据库恢复,日志条目首先产生与日志缓冲区中,日志缓冲区一般较小,一般缺省值在3M~15M之间,它是以字节为单位,show parameter log_buffer 日志缓冲区的大小启动后就是固定不变的,如要调整只能通过修改参数文件后再重新启动生效,不能动态修改,不能有SGA自动管理。
3.large pool(可选)
为了进行大的后台批处理操作而分配的内存空间,主要用于共享服务器的session memory(UGA),RMAN备份恢复以及并行查询等操作。有助于降低shared pool碎片。
4.java pool(可选)
为了java虚拟机及应用而分配的内存空间,包含所有session指定的JAVA代码和数据
5.stream pool(可选)
为了stream process而分配的内存空间。stream技术是为了在不同数据库之间共享数据,因此,它只对使用了stream数据库特性的系统是重要的。
Oracle进程
1)user process;
客户端的process,访问oracle数据一般有三种方式:1.sql*plus, 2.应用程序 3.web方式(EM)
2) server process;
服务端的进程,user process 不能直接访问oracle,必须通过相应的server process 访问实例,进而访问数据库
例如当我们用sql*plus连接oracle数据库时,再用ps -ef|grep LOCAL查看进程时
[oracle@node04 trace]$ ps -ef|grep LOCAL oracle 44437 44436 0 21:51 ? 00:00:00 oracleorcl (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq))) oracle 44458 10966 0 21:52 pts/1 00:00:00 grep --color=auto LOCAL
其中:local=yes是本地连接,本地连接不走监听,所以在服务监听没有启动的情况下,通过本地的sqlplus 还是可以连上数据库的
local=no表明是远程连接,或者说是网络连接,它是通过Listener 连接到服务器的。 客户端的应用通过客户端的监听向服务器的监听发送请求,服务器的监听接收后,在与数据库连接,执行相关操作,在把结果返回给客户端。 这是通过监听的流程。 所以在客户端需要配置监听,即配置tnsnames.ora。
可以在oracle查看V$process视图,它包括了当前所有的后台进程和服务器进程。
SQL> select pid,program,background from v$process; background字段为1是background process,其余都是server process
3) background process
1.smon进程:1)当实例崩溃后,oracle会自动恢复实例,且在RAC下,一个节点的smon可以对另外一个节点做实例恢复 2)清理和释放临时段上的数据(排序,临时表)。3)对于DMT(字典管理表空间),smon可以合并连续空闲的extent 4)维护回滚段的online.offline以及空间回收。
2.pmon进程:1)当user process失败时,清理出现故障的进程,释放所有当前挂起的锁定,释放服务器端使用的资源,2)监听空闲会话是否达到阈值,3)动态注册监听
3.DBWn 进程:负责将buffer cache中脏数据(修改过的数据)块写到磁盘上,释放数据缓冲区空间由于数据块在磁盘上的位置不连续,这个过程会比LGWR比较耗时。
触发条件:1)DBWn接到checkpoint的指令,将脏数据写到磁盘上。2)当server process无法在buffer cache中无法找到可用的buffer时。3)脏块太多时(阈值) 4)db_buffer自由空间不够时 5)表空间read only/offline/backup模式等 以上任意一个条件触发时,dbwn都会被触发,
4 lgwr 进程:LGWR负责将log buffer中的数据顺序的写到磁盘上的online redo file,由于是顺序的写入,效率要比DBWn高很多。
lgwr触发条件:
-用户提交事务(commit)
-日志切换
-最后一次提交经过了3秒
-redo log buffer容量达到了1/3或者达到了1M的redo数据。
-DBWN进程在把脏数据写入磁盘之前,必须保证这些脏数据对应的日志信息已经被写入磁盘,如果发现脏数据的日志信息没有吸入磁盘,DBWn通知LGWR进程写日志信息,完成后继续讲脏数据写入磁盘。
5.ckpt进程:CKPT进程通知DBWn进程开始将内存(buffer cache)中的脏数据写到磁盘的文件上。CKPT负责更新文件头和控制文件的信息。
作用:通知或督促dbwr写脏块
1)完全检查点:保证数据库的一致性。
2) 增量检查点:不断更新控制文件中的检查点位置,当发生实例崩溃时,可以尽量缩短实例恢复的时间。
3) 局部检查点:特定的操作下,如针对某个表空间read only/offline、Shrink 数据文件、ALTER TABLESPACE BEGIN BACKUP等
6.ARCn进程
归档进程,当数据库处于归档模式时(archive mode),ARCn负责将online redo file归档到目标存储位置,用于数据库的恢复,当在线日志切换时,会触发ARCn进程将在线日志文件归档
ARCn进程在data guard下,负责将日志向standby 服务器发送。
PGA的基本组件:
pga全称:程序全局区(Program Global Area)
- 不同于SGA,PGA属于独占式内存区,它的数据和控制信息为某个会话所独有,当一个会话产生时,Oracle会为这个会话分配一个PGA内存区域。
- PGA属于单个的服务端进程或者后台进程,而实例级别说的PGA,通常指的是所有这些会话占用的PGA的总和,也就是由参数pga_aggregate_target设定的值
主要作用:
1)缓存来自服务器进程和后台进程的数据和控制信息
2)提供排序、hash连接
3)不提供session之间的共享
4)PGA在进程创建时被分配,进程终止时被释放。所有进程的PGA之和构成了PGA的大小。
PGA的管理是比较复杂的,9i后,Oracle推荐使用PGA自动管理,屏蔽了PGA的复杂性。