五、内存结构与进程结构
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:进程监视器,负责释放体长关闭进程占用的内存、锁等资源,检查调度器进程和服务器进程是否异常关闭,异常关闭则重启。
Comments NOTHING