关系型数据库内存结构
SGA / PGA 是什么?
SGA 是实例共享的内存,PGA 是每个会话私有的内存
类比:SGA 是公共阅览室,PGA 是每个人的书桌
SGA 里有什么
它是所有会话共享的大内存池,几个主要部分组成。
- Buffer Cache:缓存数据块,命中就不用读磁盘,通常占 SGA 最大头
- Shared Pool:缓存 SQL 解析结果和执行计划,命中就跳过硬解析
- Redo Log Buffer:重做日志的内存缓冲,提交时由 LGWR 刷盘
- Large Pool / Java Pool:大块内存分配、Java 存储过程用
PGA 里有什么
每个服务进程私有:排序区、哈希 join 区、游标状态。PGA 不够时排序会落临时表空间,性能断崖式下降——所以大查询慢,先看是不是 PGA 太小导致磁盘排序。
调优入口
现代版本一般开 AMM(自动内存管理)或 ASMM,让 Oracle 自己分配。手工调参的时代基本过去了,但理解 SGA/PGA 的边界仍然是看懂 AWR 报告的前提。