Oracle 内存管理
摘选自《深入解析 Oracle DBA 入门、进阶与诊断案例》第五章
Oracle 数据库实例启动时,就需要分配共享内存,启动后台进程,如何分配和设置共享内
存对 Oracle 来说非常重要。
Oracle 所使用的内存主要包括 PGA 和 SGA。
一、 PGA(Program Global Area)程序全局区
PGA 是服务器进程(server process)使用的一块包括数据和控制信息的内存区域。,
PGA 是非共享的内存,在服务器进程启动和创建时分配,并为 Server process 排他访问,所
以 PGA 不需要 Latch 来保护。
进程创建有两种模式:专用服务模式( Dedicated server )和共享服务器模式( Shared
server)。
从内存分配和使用上 PGA 分为两个区域:
● 固定 PGA(Fixed PGA):包含了大量的院子变量,晓得数据结构和指向可变 PGA 的
指针。
● 可变 PGA(Variable PGA):可变 PGA 通过具体的内存 Heap 分配来实现,通过内部
视图 X$KSMPP 可以查看可变 PGA 内存的分配和使用情况。PGA 的可变区主要包含内
存及私有 SQL 区等。
★ 会话内存(Session Memory)存放会话的登录信息和其他信息。对于共享服务
器模式,这部分是共享的,而非私有的。
★ 私有的 SQL 区:包括绑定变量信息,查询执行状态信息,查询工作区。对于专有
服务器模式,这部分内存在 PGA 中分配;对于共享服务器模式,这部分内存在
SGA 中分配。
▼ 永久区域(Persistent Area) :包括绑定变量信息
▼ 运行时区域 :包括 SQL 运行时需要的信息,查询执行的状态信息,
通过 V$PGASTAT 视图,可以查看 PGA 累积释放回 OS 的内存空间。
通过视图 v$process,v$process_memory 可以知道 PGA 内存消耗情况。
PGA 调整建议通过视图 v$pga_target_advice 和 v$pga_tartget_advice_histogram 对 PGA 进行
优化。也可以通过 OEM 查看和进行 PGA 优化。
对 PGA 的进一步研究,可以通过转储 PGA 内存结构来实现,如下命令用于将 PGA 转储到
跟踪文件中
Alter session set events “immediate trace name heapdump level n”;
其中不同级别的 Level 决定了将哪些内存结构转储到跟踪文件。
二、 SGA(System Global Area)系统全局区
用于加载数据,对象并保存运行状态和数据库的控制信息的一块内存区域,在数据库
实例启动时分配,实例关闭时释放,每个实例都有自己的 SGA 区。
实例(Instance)包括 SGA 和后台进程。后台进程包括 PMON, SMON, DBWR, LGWR,
CKPT, ARCn 等;SGA 包括固定区域(Fixed Area), Buffer Cache,Shared Pool,Redo
Log Buffer,其他内存组件。
● 固定区域
包 括 变 量 和 小 的 数 据 结 构 ( 如 Latch , SCN ) , 通 过 内 部 表 X$KSMFSV 和
X$KSMMEM 关联,查看 Fixed Area 中每个变量的设置。(注意 oradebug 工具的使用)
● Buffer Cache(缓冲区高速缓存)
用于存储最近使用的数据块,(初始化参数 db_cache_size), db_cache_size 的最小值为
一个粒度(granule)。
评论0