五、内存结构与进程结构

10.1内存构成部分

在实例启动时,首先就要分配必须的内存结构和启动必要的后台进程。
实例的内存结构主要包含:SGA、PGA以及UGA

  • SGA:由服务器进程和后台进程共享访问。
  • PGA:用于保护与单个进程相关的数据和控制信息。每个服务器进程和后台进程都有其专属的PGA。
  • UGA:保存与单个用户会话相关的信息,如登录账号等数据。

10.1.1 SGA

全称为System Global Area,包含一个Oracle实例的数据及控制信息,实例的服务器进程和后台进程都可以访问这个区,Oracle主要消耗内存来自这个区。

SGA主要构成包括:

  • 固定区域:负责存储SGA自身系统信息,大小固定,包含了SGA的各区域指针,各种变量的值数据库及实例一般信息进程间通信所需要的信息(例如锁)。
  • 据缓冲区存放从数据文件中读取的数据,多次访问的数据会保留在此。结构:默认池与保留池与循环池
  • Java池分配给数据库中的java虚拟机使用
  • 大池:用于存储共享服务器连接模式下的UGA并发操作信息以及RMAN备份操作的磁盘I/O数据
  • 重做缓冲区:数据库运行过程中产生的重做信息先写入到该缓冲区
  • 共享池存储多种程序数据,包括解析后的SQL,PL/SQL代码系统参数数据字典等。结构:库缓存(存储SQL和PL/SQL的执行计划)和数据字典缓存(保存表或视图等对象的结构、用户权限等系统参数)。

10.1.2 PGA

全称为process global area,独立于SGA的另一部分内存区域,属于操作系统进程私有其他进程不能访问PGA主要作用用于在内存中执行的排序、散列和位图合并等操作。

PGA主要由私有SQL区域和SQL工作区域构成。
私有SQL:保存解析后的SQL语句的私有信息,如绑定的变量的值。
SQL工作区域:存放服务器进程执行排序、散列以及位图合并等操作。

10.1.3 UGA

UGA主要用于存储用户会话的状态信息。
使用共享服务器模式连接数据库时,UGA在SGA中进行分配
使用专用服务器模式连接数据库时,UGA在PGA中进行分配。

10.2进程

Oracle实例包含三种进程服务器进程,后台进程和从属进程。

10.2.1 服务器进程

定义:处理用户连接提出的各种请求,它主要完成以下任务:

  • 解析并执行SQL语句,包括创建并执行查询计划
  • 执行PL/SQL代码
  • 把需要的数据从磁盘数据文件读入到SGA中的数据缓冲区
  • 将处理结果返回给客户端连接

服务进程主要分为两类:专用服务器进程和共享服务器进程。
专用服务器进程:只服务于一个用户进程
共享服务器进程:可服务于多个用户进程,但是处理用户请求需要按顺序来处理。

10.2.2 后台进程

定义:后台进程随着实例启动而启动,作用保证数据库正常运行。完成的功能:磁盘I/O,实例恢复,写入重做数据到磁盘等。介绍几个重要的后台进程

  • DBWn:数据写入进程,把数据缓冲区中的修改过的数据写入到磁盘上的数据文件。
  • LGWR:日志写入进程, 把重做缓冲区的重做数据写入到磁盘的重做日志文件。
  • CKPT:检查点进程,把检查点信息(SCN号)写入数据文件头及控制文件,并通知DBWn进程把数据缓冲区中的脏块写入数据文件。
  • SMON:系统监控进程,完成任务:系统故障重启时,执行实例恢复,回收不再使用的临时段。
  • PMON:进程监视器,负责释放体长关闭进程占用的内存、锁等资源,检查调度器进程和服务器进程是否异常关闭,异常关闭则重启。