一、Oracle体系架构概览
Oracle数据库是一个高度复杂的多进程、多线程系统,其架构设计围绕 高性能、高可用性 和 数据一致性 展开,核心模块包括内存结构、进程管理、存储机制和分布式组件。本文将重点剖析内存管理、锁机制与RAC(Real Application Clusters)原理。
二、内存管理:SGA与PGA的协同
1. 内存结构总览
Oracle内存分为 共享内存(SGA) 和 私有内存(PGA) 两部分,前者由所有进程共享,后者为每个会话私有。
SGA(System Global Area)
- Database Buffer Cache:缓存数据块,减少物理I/O。
- 通过LRU算法管理块淘汰,支持
KEEP
池与RECYCLE
池分级缓存。
- 通过LRU算法管理块淘汰,支持
- Shared Pool:
- Library Cache:缓存SQL解析树与执行计划(通过哈希值匹配)。
- Data Dictionary Cache:存储表结构、权限等元数据。
- Redo Log Buffer:临时存储重做日志条目,由LGWR进程写入联机重做日志文件。
- Large Pool:为备份恢复、并行查询分配大块内存。
- Java Pool:支持Java存储过程执行。
- Streams Pool:用于数据复制与流处理。
PGA(Program Global Area)
- 排序区(Sort Area):处理
ORDER BY
、GROUP BY
等排序操作。 - 会话内存:存储绑定变量、游标状态等会话私有数据。
- 哈希区:用于哈希连接(Hash Join)操作。
2. 内存管理机制
- 自动内存管理(AMM):通过
MEMORY_TARGET
参数统一管理SGA和PGA,动态调整各组件大小。 - 手动配置:通过
SGA_TARGET
和PGA_AGGREGATE_TARGET
分别设置SGA与PGA上限。
示例配置: