zoukankan      html  css  js  c++  java
  • 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的复杂性。

      

        

      

  • 相关阅读:
    Java 默认修饰符
    大学生职业规划到底应该规划什么?
    IT就业攻略:看准趋势 选对行业
    积极推动校企深度合作 做好产学结合示范工作
    强化工程实践能力 提升就业核心竞争力
    大学生就业:以“硬”实力实现“软”着陆
    使用IDEA 创建SpringBoot项目
    项目记录随笔
    全国城市数据库sql
    xp win7共享
  • 原文地址:https://www.cnblogs.com/zmc60/p/15501617.html
Copyright © 2011-2022 走看看