程 序全局区域(Program Global Area),可以理解为进程全局区域。PGA 在服务器进程(Server Process)启动时创建,由服务器进程分配 PGA 所需的内存结构。PGA 是非共享的,所以 PGA 中的数据结构无需通过 Latch 来保护。在 oracle 中 PGA 的内存管理对于 DBA 来说与 SGA 同样重要。来扒起来吧伙伴们!
专用服务器模式下 PGA 实例
PGA 的组件
专用服务器模式下 PGA 组件
私有 SQL 区(Private SQL Area)
Oracle 的应用程序或用户的应用程序在执行时,都可能显示或隐式的打开游标(Cursor)来处理任务,打开游标需要分配私有 SQL 区。用户进程管理私有 SQL 区,而分配和回收取决于应用程序,为了防止过度私有 SQL 区分配,Oracle 通过 OPEN_CURSORS 参数来限制每个用户进程能够同时打开的游标数量。用户进程的任务执行以及 Cursor 的使用是 PGA 内存的主要消耗,也是 DBA 进行数据库性能优化最应关注的内容。
游标(Cursor)
永久区域(Persistent Area):
该区域包含绑定变量值。执行语句时,将绑定变量值提供给 SQL 语句 (游标被关闭时该区域被释放);
运行时区域(Run-Time Area):
该区域包含语句执行状态信息。如运行时区跟踪到目前为止在全表扫描中检索到的行数。Oracle 数据库创建运行时区作为执行请求的第一步。对于 DML 语句,当 SQL 语句执行完后,运行时区将被释放(当游标执行结束后被释放)。
私有 SQL 区在不同服务器模式下的分布:
内存区域 | 专用服务器模式 | 共享服务器模式 |
永久区 | PGA | SGA |
运行时区 | PGA | PGA |
SQL 工作区(SQL Work Area)
该区域在内存密集型请求下分配,如下:
排序区(Sort Area)
排序操作符在排序区对行进行排序操作;
哈希区(Hash Area)
哈希连接运算符使用哈希区从其左侧输入构建哈希表;
位图合并区(Bitmap Merge Area)
位图合并使用位图合并区来合并从多个位图索引的扫描中检索到的数据。
会话内存(Session Memory)
用于存放会话登录信息,共享服务器模式下,该内存区是共享的。