pga 作用
Oracle pga的作用
PGA 内存结构与功能解释:
PGA
├── 1. Private SQL Area
├── 2. Session Memory
├── 3. SQL Work Areas
│ ├── Sort Area
│ ├── Hash Area
│ ├── Bitmap Merge Area
│ └── Bitmap Create Area
└── 4. Stack Space
1. Private SQL Area(私有 SQL 区)
- 作用:存放每条 SQL 语句执行时需要的私有数据。
- 包括:
- 解析区(Parse Area):存放解析树、执行计划等。
- 绑定变量值。
- 游标上下文信息(如游标位置、执行状态)。
- 每个用户对一条 SQL 会拥有自己的 Private SQL Area。
2. Session Memory(会话内存)
- 作用:存储整个数据库会话相关的信息。
- 包括:
- 会话级变量(如 PL/SQL 包变量)
- 登录信息
- 客户端与服务器之间的交互数据结构
- 生命周期与数据库会话一致。
3. SQL Work Areas(SQL 工作区)
执行复杂 SQL 运算时会动态分配这些区域:
a. Sort Area(排序区)
- 用于排序操作:
ORDER BY
、GROUP BY
- 索引创建中的排序
- 若数据太大内存放不下,将使用临时表空间(TEMP 溢出)。
b. Hash Area(哈希区)
- 用于哈希连接或哈希聚合操作:
- 比如
HASH JOIN
,HASH GROUP BY
- 比如
- 小数据可在内存中处理,超出则写临时表空间。
c. Bitmap Merge Area(位图合并区)
- 用于合并多个位图索引结果。
- 出现在复杂的位图索引扫描场景中。
d. Bitmap Create Area(位图创建区)
- 用于创建新的位图索引。
- 例如:对一个大表建立位图索引时使用。
4. Stack Space(堆栈空间)
- 操作系统进程级空间,用于函数调用栈。
- 包含局部变量、函数参数、返回地址等。
- 不直接参与 SQL 运算,但对 PL/SQL 调用等必要。
总结表格:
区域名称 | 用途说明 |
---|---|
Private SQL Area | SQL 语句解析和执行上下文,包含解析区、绑定变量等 |
Session Memory | 数据库会话相关信息,如变量、连接信息 |
Sort Area | 排序操作所需内存 |
Hash Area | 哈希连接、哈希聚合操作内存 |
Bitmap Merge Area | 合并位图索引结果 |
Bitmap Create Area | 创建位图索引时用到 |
Stack Space | PL/SQL 或进程执行的调用堆
|
专用模式
PGA
├── UGA
│ ├── Private SQL Area
│ └── Session Memory
├── SQL Work Areas
└── Stack Space
共享模式
PGA
├── SQL Work Areas
└── Stack Space
SGA
└── UGA
├── Private SQL Area
└── Session Memory
1. 核心理解:UGA 是“用户会话级”内存,PGA 是“进程级”内存
Oracle 中:
- PGA 是每个后台进程/会话进程私有的内存区域。
- UGA(User Global Area) 是用来存储 用户会话的数据,比如:游标、绑定变量、会话变量等。
2. 不同服务器模式下,UGA 所在位置不同:
服务器模式 | UGA 存在位置 | 与 PGA 的关系 |
---|---|---|
Dedicated Server(专用) | PGA 内部 | UGA 就在 PGA 里 |
Shared Server(共享) | SGA 内部(Shared Pool 或 Large Pool) | 与 PGA 分离,PGA 仅用于临时运算 |
3. 那么你问的这几个 PGA 子区域,和 UGA 的关系如下:
PGA 子模块 | 是否属于 UGA? | 说明 |
---|---|---|
1. Private SQL Area | 是 UGA 的一部分 | 存放游标、绑定变量、解析状态等会话数据 |
2. Session Memory | 是 UGA 的一部分 | 存放会话级 PL/SQL 包变量、登录信息等 |
3. SQL Work Areas | 不是 UGA | 用于 SQL 运算(排序、哈希等),仅在 PGA 中,且是临时的 |
4. Stack Space | 不是 UGA | 是操作系统为进程提供的栈内存,和会话无关 |
4. 图示对比:
Dedicated Server(UGA 包含在 PGA 中)
PGA
├── UGA
│ ├── Private SQL Area
│ └── Session Memory
├── SQL Work Areas
└── Stack Space
Shared Server(UGA 移到 SGA)
PGA
├── SQL Work Areas
└── Stack SpaceSGA
└── UGA├── Private SQL Area└── Session Memory
5. 总结一句话:
Private SQL Area 和 Session Memory 属于 UGA,具体是放在 PGA 还是 SGA,要看服务器模式。其余的 SQL Work Areas 和 Stack Space 属于 PGA,不属于uga