第
第
5
5
章
章
内存管理
内存管理
Oracle 数据库实例启动时,就 需 要 分 配 共 享 内 存 ,启 动 后 台 进 程 ,如何分配和设置共享内
存参数,对于 Oracle 来说是非常重要的。不当的内存分配轻则影响性能,重则导致数据库故
障,在生产实际中不容忽视。
Oracle 数据库所使用的内存主要涉及两个方面:PGA 和 SGA。本章就 Oracle 的内存管理
问题进行探讨。
5.1 PGA 管理
PGA 指的是程序全局区(Program Global Area), 是 服 务 器 进 程 ( Server Process)使用的
一块包含数据和控制信息的内存区域,PGA 是非共享的内存,在服务器进程启动或创建时分
配(在系统运行时,排序、连接等操作也可能需要进一步的 PGA 分配),并为 Server Process
排他访问,所以 PGA 中的数据结构并不需要通过 Latch 来保护。
5.2.1 什么是 PGA
进程的创建通常有两种模式:专用服务器模式(Dedicated Server)及共享服务器模式
(Shared Server)。 在 专 用 服 务 器 模 式 下 , Oracle 会为每个会话启动一个 Oracle 进程;而在共享
服务器模式下,通常在服务器端启动一定数量的服务器进程,然后由多个客户端请求共享同一
个 Oracle 服务进程。通常数据库都应当运行在专用服务器模式下。PGA 的内容依专用模式和
共享服务器模式而有所不同,但是通常来说,PGA 中包含私有 SQL 区(存放绑定信息、运行时
内存结构等)、Session 信息等内容。
从内存分配与使用上 PGA 可以被区分为两个区域:
! 固定 PGA(Fixed PGA)- 固定 PGA 和固定 SGA 类似,包含了大量原子变量、小的
数据结构和指向可变 PGA 的指针,这些变量在源码中定义,在编译时分配,可以被
认为是 PGA 的保留内存。
! 可变 PGA(Variable PGA)- 可变 PGA 通过具体的内存 Heap 分配来实现,其空间分
配与使用时可以变化的,通过内部视图 X$KSMPP([K]ernel [S]ervice [M]emory [P]GA
hea[P])可以查询可变 PGA 内存的分配和使用情况。PGA 的可变区中主要包含会话
内存及私有 SQL 区等。
下图简要说明了 PGA 的创建过程,当客户端向服务器发送连接请求,服务器监听到客户
端请求,在专用服务器模式下,会在服务器端衍生一个 Server Process 来代理用户的请求,服
务器进程进而向实例发起连接,创建会话(CREATE SESSION), 而 PGA 就为 Server Proces
所分配和使用:
评论