Oracle 11g 服务器结构

1、oracle 11g服务器结构

Oracle服务器主要由实例(instance)、数据库(database)、程序全局区和前台进程组成。
实例(instance)用来提供管理数据库的功能;
实例可以进一步划分为:系统全局区(SGA)和后台进程(PMON/SMON等)。
SGA使用操作系统的内存资源;后台进程使用CPU和内存资源。
数据库(database)由Oracle数据库文件组成,用来存储系统数据。
程序全局区(PGA)是一个非共享的内存区域,用于管理用户进程的私有资源。
前台进程可以再划分为用户进程和服务器进程,需要使用功能CPU和内存资源。

 

 2、系统全局区

 系统全局区是所有用户进程共享的一块内存区域。SGA主要由高速数据缓冲区、重做日志缓冲区、共享池、大型池和java池等内存结构组成。SGA随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA区域也就消失了。

2.1、高速数据缓冲区

   高速数据缓冲区中存放着oracle系统最近访问过的数据块(缓存块)。当用户向数据块发出请求时,如果在高速数据缓冲区中存在请求的数据,则oracle系统会直接从高速数据缓冲区中读取数据并返回给用户,否则oracle系统会打开数据文件读取请求的数据。经常或最近被访问的数据块会被放置到高速数据缓冲区的前端,不经常访问的数据块会被放置在高速数据缓冲区的后端,当高速数据缓冲区填满时会自动挤掉不经常访问的数据块。

 为了便于管理SGA的内存数据,oracle把高速数据缓冲区分为以下3个部分。

 a、脏数据区

     脏数据区中存放着已被修改过的数据,这些数据等待被写入数据文件中。当一条更新或删除语句对某些数据块中的数据修改后,那么这些数据块就被标记为“脏”,然后等待提交命令并通过后台进程DBWR将其写入数据文件。

b)空闲区

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

c)保留区

  保留区包含那些正在被用户访问的数据块和明确保留以作为将来使用的数据块(即缓存块),这些数据块将被保留在缓存区中。

2.2、重做日志缓冲区

  重做日志缓冲区用于存放对数据库进行修改操作时所产生的日志信息。,这些日志信息在导入重做日志文件之前,首先存放到重做日志缓冲区,然后在检查点或重做日志缓冲区中的信息量达到一定峰值时,最后由日志写入(LGWR)进程,将缓存区中的内容写入到重做日志文件。

  重做日志缓冲区的大小由参数LOG_BUFFER参数而定,该参数可以在实例启动后动态修改。相对于高速缓冲区而言,重做日志缓冲区对数据库的性能影响较小,通常较大的重做日志缓冲区能够减少对数据库的IO读写次数,对数据库整体性能有一定提供。

2.3、共享池

  共享池是SGA保留的内存区域,用于缓存SQL语句、PL\SQL语句数据字典、资源锁、字符集及其它控制结构等。共享池包括库高速缓冲区和字典高速缓冲区。

    2.3.1、库高速缓冲区

      库高速缓冲区是共享池的一部分,主要包括SQL共享区和私有SQL区两个组成部分。库高速缓冲区存放最近用过的sql语句、plsql语句的文本和执行计划。当下一次执行相同的sq语句或PL/SQL语句时可以直接从库高速缓冲区中找到之前已经生成的执行计划直接执行,从而提高系统执行效率。

    每条被缓存的sql或pl/sql语句被分成两个部分,分别存放在sql共享区或私有sql区中。sql共享区存放sql或plsql的语法分析结果和执行计划。sql共享区中存放sql语句中绑定的变量、环境和会话等信息,这些信息属于被执行语句的用户私有信息,其他用户无法共享。

     2.3.2、字典高速缓冲区

     用于存放oracle系统内部管理所需的数据字典信息,如用户名、数据对象和权限等。

共享池的内存空间大小是可以动态改变的,一般通过修改参数SHARED_POOL_SIZE的值来实现。修改ORACLE共享池的内存空间大小为30M.如下

 alter system set shared_pool_size-30m;

2.4、大型池

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

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

   b、使用I/O Slave仿真异步I/O功能时,大型池将作为I/O缓冲区使用。

   c、执行具有大量需要排序的sql语句。

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

大型池的缓冲区大小是通过参数LARGE_POOL_SIZE定义的,在oracle 11g,用户可以使用alter system命令动态修改缓冲区的大小。

  alter system alter large_pool_size=16m;

2.5、java池

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

2.6、流池

ORACLE流池用于在数据库与数据库之间进行信息共享。如果没有用到ORACLE流,就不需要设置该池。

流池的大小由参数:STREAMS_POOL_SIZE决定。

 3 程序全局区

 程序全局区也可称为用户进程全局区,它的内存区在进程私有区而不是共享区。虽然PGA是一个全局区,可以把代码、全局变量和数据结构都可以存放在其中,但区域内的资源不像SGA一样被所有的用户进程共享,而是每个ORACLE 服务器进程都属于自己的那部分PGA资源。PGA由私有SQL区和会话区组成。

3.1、私有sql区

    私有SQL区用于存储变量以及SQL语句运行时的内存结构信息,当每个用户连接到实例时会在实例中创建一个会话。

3.2、会话区

  会话区用户存放用户的会话信息。显示当前用户进程的PGA信息。

    show parameter pga;

4、前台进程

   前台进程包括用户进程和服务器进程,使用前台进程能够实现用户与实例的沟通。

4.1、用户进程‘

    用户进程指那些能够产生或执行sql语句的应用程序,无论是sqlplus还是其他应用程序,只有能生成或执行sql语句,都被称为 用户进程。

   在用户进程中有2个非常重要的概念,连接和会话。

4.2、服务器进程

   服务器进程是用于处理用户会话过程中向数据库实例发出的sql语句、或sqlplus命令,它可以分为专用服务器模式和共享服务器模式。

5、后台进程

 oracle后台进程是一组运行于Oracle服务器端的后台程序,是oracle实例的重要组成部分。这组后台进程有若干个,它们分工明确-分别完成不同的系统功能。如上图所示。其中SMON、PMON、DBWR、LGWR、和CKPT,这个后台进程必须正常启动,否则将导致数据库实例崩溃。

  5.1、数据写入进程

  数据写入进程(DBWR) :负责将内存中的“脏”数据块写回到数据文件中。在某些比较繁忙的应用系统中,可以修改服务器参数文件SPFILE的DB_WRITER_PROCESSES参数,以允许使用多个DBWR进程,但是DBWR进程的数量不应该超过系统处理器的数量。

 

   show parameter db_writer_processes;

5.2、检查点进程

   检查点(CKPT)进程可以看作是一个事件,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据块写回到数据文件。当oracle 系统满足一定条件时,写入进程会将日志信息写入重做日志文件组中,当发生日志切换时(写入操作正要从一个日志文件切换到例一组时)就会启动检查点进程。数据库管理员可以修改初始化参数文件SPFILE中的SPFILE中的checkpoint_process参数为true来启动检查点进程。

5.3、日志写入进程(LGWR)

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

oracle实例在运行过程中会产生大量的日志信息,这些日志信息首先将被记录在SGA的重做日志缓冲区中,当发生提交命令、或者重做日志缓冲区的信息满1/3时,或者重做日志信息存放超过3秒。LGWR进程就将日志信息从重做日志缓冲区中读出并写入日志文件组中较小的文件中。

5.4、归档进程(ARCH)

   归档进程是一个可选择的进程,只有当oracle数据库处于归档模式时,该进程才能够起作用。若oracle处于归档模式,当各个日志组都被写满而即将被覆盖之前,先由arch 把即将被覆盖的日志文件中的信息读出,然后再把这些“读出的日志信息”写入到归档日志文件中。当系统比较繁忙而导致LGWR进程处于等待ARCH进程时,可以通过修改LOG_ARCHIVE_MAX_PROCESSES参数启动多个递归进程,从而提供归档写磁盘的速度。

5.5、系统监控进程(SMON)

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

5.6、进程监控进程(PMON)

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

5.7、锁进程

锁进程(LOCK)是一个可先进程,并行服务器模式下可以出现多个锁定进程以利于数据库通信。

5.8、恢复进程(RECO)

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

5.9)调度进程(DNNN)

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

5.10)快照进程(SNPN)

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

set pagesize 50;

select name,description from v$bgprocess;

 

 

 


 

 

 

 

 

  

posted on 2022-08-08 22:01  小破孩楼主  阅读(187)  评论(0编辑  收藏  举报