2.oracle内存结构和后台进程02

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 memoryUGA),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比较耗时。

    可以通过设置多个DBWn进程加快脏,  db_writer_processes

    触发条件: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/offlineShrink 数据文件、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的复杂性。

 

 

 

  

    

  

posted on 2021-11-02 22:41  太白金星有点烦  阅读(64)  评论(0编辑  收藏  举报

导航