Oracle数据库内存管理:从手动到自动的转变
1. 手动内存管理及 *_AREA_SIZE 参数
1.1 内存使用观察
在进行排序操作时,尽管设置了 SORT_AREA_SIZE
上限为 1GB,但实际仅使用了约 9MB。这表明 SORT_AREA_SIZE
只是一个上限,并非默认和唯一的分配大小。在不同版本的 Oracle 或不同操作系统上运行相同测试,可能会有不同表现,但总体趋势是:随着允许的排序区域大小增加并执行大型排序操作,会话使用的内存量会增加。例如,在 Oracle 8i 中,PGA 内存不会缩小,因为 8i 版本中 PGA 作为堆进行管理,通过 malloc()
分配内存;而在 9i 及以上版本,会根据需要使用特定于操作系统的内存分配调用附加和释放工作区。
1.2 *_AREA_SIZE 参数要点
- 控制操作内存上限 :这些参数控制 SORT、HASH 或 BITMAP MERGE 操作使用的最大内存量。
- 多操作与多区域 :单个查询可能有多个使用此内存的操作,可能会创建多个排序/哈希区域。若设置排序区域大小为 10MB,会话可能使用 10MB、100MB、1000MB 或更多的 RAM。这些设置是单个操作的限制,而非会话限制。
- 按需分配内存 :设置排序区域大小为 1GB,并不意味着会分配 1GB 的 RAM,只是允许 Oracle 进程为排序/哈希操作分配该数量的内存。