zoukankan      html  css  js  c++  java
  • Oracle 11g 体系结构 --SGA PGA 前后台进程

    Oracle服务器主要由实例、数据库、程序全局区、前台进程

      实例:用来提供管理数据库的功能

      数据库:由Oracle数据库文件组成,用来存储系统数据 ;一般有:数据文件、控制文件、重做日志文件

      而实例可以进一步划分为:系统全局区(SGA)和 后台进程(PMON,SMON等)

    而SGA 是操作系统的内存资源,后台进程使用CPU和内存资源  程序全局区(PGA)是一个非共享的内存区域,用于管理用户进程的私有资源

    系统全局区(SGA)

      System Global Area 是所有用户进程共享的一块内存区域

    主要有以下组成部分:  

    1.高速数据缓冲区(Database buffer cache)  存放Oracle最近访问的块 DBWR

     为了便于SGA的内存数据,Oracle把高速数据缓冲区分为以下3个部分:

    a脏数据区:存放着已被修改过的数据,这些数据等待被写入到数据文件中。

    b空闲区:空闲区中的数据块不包含任何数据,这些数据块可以被写入数据,Oracle可以从数据文件中读取数据块,并将其存放到该区中

    c保留区:包含那些被用户访问的数据块和明确保留以作为将来使用的数据块

    2.重做日志缓冲区(Redo log buffer cache)   数据库进行修改时所产生的日志信息 LGWR

      大小由LOG_BUFFER参数指定,也可以在实例启动后动态修改。一般会设的较大些

    3.共享池(Shared Pool)

      是SGA保留区域,用于缓存SQL语句、PL/SQL语句、数据字典、资源锁、字符集以及其他控制结构等。包含一下两个部分:

    a--库高速缓冲区(Library cache): 主要包括共享SQL区和私有SQL区两个组成部分。库高速缓存区中存放最近使用过的SQL语句、PL/SQL语句的文本和执行计划。当下一次执行相同的SQL语句或PL/SQL语句时,可以直接在库高速缓冲区中找到之前已经生成的执行计划,而不需要再次解析相同的SQL语句或PL/SQL语句,从而提高系统执行效率。

    每条被缓冲的SQL 或PL/SQL语句都被分成两个部分,分别被存放在共享SQL区和私有SQL区中。共享SQL区中存放SQL或PL/SQL语句的语法分析结果和执行计划,如果以后要再次执行类似的语句,则可以利用共享SQL区中已缓存的语法分析结果和执行计划。私有SQL区存放SQL语句中的绑定变量、环境和会话等信息,这些信息属于执行该语句的用户的私有信息,其他用户则无法共享这些信息。

    b--字典高速缓存区:用于存放Oracle系统内部管理所需要的数据字典信息,如用户名、数据对象和权限等。

      共享池的内存空间大小是可以动态改变的,一般通过修改参数SHARED_POOL_SIZE的值来实现

      如:alter system set shared_pool_size=30m;

    注意:共享池的大小不是越大越好,因为系统的内存资源是有限的,而且操作系统本身也要消耗一定的内存空间。

    4.大型池(Large Pool)

      在SGA中不是必需的内存结构,只有在以下某种特殊情况,实例才会使用大型池来减轻共享池的访问压力:

    a--当使用恢复管理器进行备份和恢复操作时,大型池作为I/O缓冲区使用

    b--当使用I/O Slave 仿真异步I/O功能时,大型池将被当做I/O缓冲区使用。

    c--执行具有大量排序工作的SQL

    d--当使用并行查询,大型池作为查询进程彼此交换信息的地方。

      大型池的缓存区大小是通过LARGE_POOL_SIZE参数定义的,在11 g中,用户可以使用alter system修改其大小

      使用:show parameter large_pool_size;可以查看当前系统的大型池的内存大小

    注意:如果在SGA区中,没有设置大型池,则在实例需要时,Oracle系统会在共享池或PGA中分配一定的缓存空间,这样必然会影响到共享池或PGA的工作效率。

    5.java池  

      用来提供内存空间给Java虚拟机使用,目的是支持在数据库中运行Java程序包,其大小由JAVA_POOL_SIZE参数决定。

    6.流池

      用在数据库与数据库之间进行信息共享。如果没有用到Oracle流,就不需要设置该池。流池的大小由参数STREAMS_POOL_SIZE决定。

    程序全局区(PGA)

      Program Global Area,也可以称作用户进程全局区。内存区在进程私有区中。虽然PGA是一个全局区,可以把代码、全局变量和数据结构都可以放在其中,但区域内的资源并不像SGA中的那样被所以用户所共享,而是每个Oracle服务器进程都只用于属于自己的那部分PGA资源。 各个服务进程PGA区总和即为实例PGA区的大小。通常有:

    a--私有SQL区:

      存储变量以及SQL语句运行时的内存结构信息,当每个用户连接到实例时,都会在实例中创建一个会话。这些会话可能会在SGA区中创建一个共享SQL区,但在PGA区中可能会创建多个私有SQL区。把一个私有SQL区与对应共享SQL区合并在一起,就可以获得一条SQL语句的完整缓存数据。

      另外,每个私有SQL区可以再分为静态区和动态区两部分。静态区的信息在会话过程中保持不变,只有当会话结束时,静态区才会释放掉;而动态区的信息在整个会话过程中是不断变化的,一旦SQL语句指定完毕,即使会话还没有结束,动态区也被释放掉。

    b--会话区

      用于存放用户的会话信息(如登陆用户名)。如果数据库处于共享服务器连接模式下,则会话区将位于SGA区域,而不是PGA中 

    更改用:alter system set pga_aggregate_target=18m; 查看PGA:show parameter pga;

    前台进程  不属于实例的一部分,包括

    a--用户进程

      那些能够产生执行SQL语句的应用程序,无论是SQL *Plus,还是其他应用程序,只要是能生成或执行SQL语句,都被称作用户进程

      两个概念:连接和会话

      连接:一个用户进程与实例之间建立的通信取到,这个渠道可以通过操作系统上的相关通信进制或网络连接来实现。

      会话:用户进程与实例之间建立连接后形成的用户与实例之间的交互方式,一般是用户发出请求,数据库实例为用户返回响应消息的方式。

    b--服务器进程

      用于处理用户会话过程中向数据库实例发出的SQL语句或SQL *Plus命令,分为专用服务器模式和共享服务器模式。

    后台进程

      是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分。SMON,PMON,DBWR,LGWR,CKPT这5个后台进程必须正常启动,否则将导致数据库实例崩溃。

    数据写入进程(DBWR):

      主要任务是负责将内存中的“脏”数据块写回到数据文件中。通常写入不会是随时进行的,所以一般在一下情况发生时,DBWR进程会将“脏”数据块写入数据文件:

    1.当用户进程执行插入或修改等操作时,需要将“新数据”写入高速数据缓冲区,如果在高速数据缓冲区没有找到足够大的空闲数据块来存放这些“新数据",这时,Oracle系统将启动DBWR进程将”脏“数据数据块写入数据文件,以获得空闲数据块来存储这些”新数据“

    2.当检查点进程启动后,它会强制要求DBWR将某些”脏"数据块写入数据文件

    3.当“脏”数据块在高速数据缓冲区中存放超过3秒钟,DBWR进程会自动启动文件将某些“脏"数据块写入到数据文件中。

    注意:可以修改SPFile中DB_WRITER_PROCESSES 参数,以允许使用多个DBWR进程(数量不要超过系统处理器的数量)

    检查点进程(CKPT)

      可以看做是一个事件,当发生日志切换时,会启动检查点进程。 DBA可以通过修改初始化参数SPFile中的CKECKPOINT_PROCESS为TRUE来启动检查点进程

    日志写入进程(LGWR)

      将重做日志缓冲区中的数据写入重做日志文件。Oracle系统首先将用户所做的修改日志信息写入日志文件,然后再将修改结果写入数据文件。

      Oracle实例在运行中会产生大量日志信息,这些日志信息首先被记录在SGA的重做日志缓冲区中,当发生提交命令、或者重做日志缓冲区的信息满1/3、或者日志信息存放超过3秒钟,LGWR就将日志信息从重做日志缓冲区读出并写入日志文件组中序号较小的文件中,一个日志组写满后接着写另外一组。当LGWR进程将所有的日志文件都写过一遍后,它将再次转向第一个日志文件组重新覆盖。

    归档进程(ARCH)

      可选进程,在Oracle处于归档模式时,该进程才能起到作用。当各个日志文件组都被写满而即将被覆盖之前,先由归档进程把即将被覆盖的日志文件的日志信息读出,然后再把这些”读出的日志信息"写入到归档日志文件中。

      当系统比较繁忙时,可能导致LGWR等待ARCH进程,可以修改LOG_ARCHIVE_MAX_PROCESS参数启动多个归档进程,从而提高归档写磁盘的速度。

    系统监控进程(SMON)

      数据库系统启动时执行恢复工作的强制性进程。比如,在并行服务器模式下,SMON可以恢复另一个处于失败的数据库,使系统切换到另外一台正常的服务器上。

    进程监控进程(PMON)

      用于监控其他进程的状态,当有进程启动失败时,PMON会清除失败的用户进程,释放用户进程所用的资源。

    锁定进程(LCKN)

      可选进程,并行服务器模式下可以出现多个锁定进程以利于数据库同学

    恢复进程(RECO)

      分布式数据库模式下一个可选进程,用于数据不一致时进行恢复工作。

    调度进程(DNNN)

      可选进程,在共享服务器模式下使用,可以启动多个调度进程

    快照进程(SNPN)

      用于处理数据库快照的自动刷新,并通过DBMS_JOB包运行预定的数据库存储过程。

    默认情况下,Oracle 11g会启动200多个后台进程。--295--(v$bgprocess[name,description])

      

  • 相关阅读:
    QtCreator无法编辑源文件
    【Newtonsoft.Json】自己实现JsonConverter ,精简返回的数据结果
    Ghostscript 将PDF文件转换成PNG图片 问题一二
    Nginx--面试基础必会
    Nginx日志配置
    Nginx缓存原理及机制
    Nginx限流
    Nginx 实现 Rewrite 跳转
    Nginx正确配置Location
    渐进深入理解Nginx
  • 原文地址:https://www.cnblogs.com/xcnblog3035/p/5223797.html
Copyright © 2011-2022 走看看