设为首页 加入收藏

TOP

Oracle内存管理(之二)(二)
2015-07-24 11:59:13 来源: 作者: 【 】 浏览:21
Tags:Oracle 内存 管理 之二
alfree_heap TRUE use real-free based allocator for PGAmemory

SQL>

_use_realfree_heap 是自动管理PGA技术的关键技术变化,realfree代表着实时释放。Oracle9i之前手工管理的PGA的主要问题在于,UGA缺省的在PGA中分配,当会话执行了诸如排序、HASH-JOIN等操作,耗用了大量PGA内存,而当会话执行完毕之后,内存会释放给PGA而不是OS,在很多时候这会导致过度的PGA内存使用(在以前版本PGA内存分配和回收是通过malloc()以及brk()调用来完成的);从Oracle9iR2开始,自动的PGA内存管理当_use_realfree_heap为true时,PGA的内存分配将会通过mmap()调用来实现,这样当调用结束时将不必将内存返回给进程而直接返回给OS,从而实现了更好的PGA内存分配与使用。

通过V$PGASTAT视图可以查询PGA累计释放回OS的内存空间:

SQL> select name,value from v$pgastat wherename like '%OS';

NAME VALUE

---------------------------------------- -----------

PGA memory freed back to OS 175374336

下图是UGA的结构示意图:

\

\


在PGA的示意图中,还涉及了另外一块内存区域被称为CGA(Call Global Area)-调用全局区。与其他的全局区不同,CGA的存在是瞬间的,只存在于调用过程中,而且无论UGA存在于PGA还是SGA,CGA都是PGA的SubHeap。对 于 实 例 的 一 些 低 层 次 的 调 用(Low-Level Call )需要CGA,包括分析SQL语句、执行SQL语句以及获取查询结果都需要使用CGA,在SQL执行过程中的每个递归调用需要一个独立的CGA,在SQL的解析过程中,查询数据字典信息、对SQL进行语法以及语义的解析、SQL的优化以及不同执行计划的评估都需要使用CGA。

当然,调用并不是只通过CGA中的数据结构来工作,实际上调用所需要的大部分的重要数据结构都来自于UGA(如SQL AREA, PL/SQL AREA,Sort Area都存放在UGA中,因为这些结构在调用期间需要一直可用),CGA中只包含了那些调用结束后可以被释放的数据。例如,CGA中包含了Direct I/O BUFFER、递归调用信息、表达式评估的堆栈信息等,此外Java调用内存也在CGA中分配。



首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇oralce11g注册表卸载20140810 下一篇oracle批量插入数据

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Sphinx : 高性能SQL (2025-12-24 10:18:11)
·Pandas 性能优化 - (2025-12-24 10:18:08)
·MySQL 索引 - 菜鸟教 (2025-12-24 10:18:06)
·Shell 基本运算符 - (2025-12-24 09:52:56)
·Shell 函数 | 菜鸟教 (2025-12-24 09:52:54)