Oracle 内存结构
与Oracle 实例关联的基本内存结构包括:
系统全局区(SGA):由所有服务器进程和后台进程共享
程序全局区(PGA):由每个服务器和后台进程专用,每个进程都有一个PGA。
初次之外还有一个内存区域叫UGA(User global Area,用户全局区),用来保护用户的回话信息,不过该区域并非独立存在,在dedicated模式中,UGA在PGA中分配,在share模式中UGA在SGA中分配
系统全局区(SGA) 是共享内存区,包含实例的数据和控制信息,由以下各项组成:
数据库缓冲区高速缓存(DB buffer cache):用于缓存从磁盘检索到的数据块
重做日志缓冲区(redo buffer):用于缓存重做信息,直到其可以写入磁盘为止
共享池(share pool):用于缓存可在用户间共享的各种结构
大型池(large pool):用于缓冲大型I/O 请求的可选区域,以便支持并行查询、共享服务器、
Oracle XA 以及rman等备份操作
Java 池(java pool):用于存放Java 虚拟机(JVM) 中特定于会话的Java 代码和数据
流池(stream pool):由Oracle Streams 使用
数据库缓冲区高速缓存、共享池、大型池、流池和Java 池的大小可以按照当前需求自动
调整。
granules:定义查看10g联机文档,
All SGA components allocate and deallocate space in units of granules. Oracle Database tracks SGA memory use in internal numbers of granules for each SGA component.
即oracle内存分配的基本单位,granules的大小取决于总sga的大小,大多数平台下,如果总的sga低于1G,则granules为4M,如果超过1G,则为16M。
Automatic Shared Memory Management(ASSM)
自动管理共享内存(ASMM) 是Oracle 数据库中另一个关键的自我管理增强功能。此功能使Oracle 数据库实例使用的大多数重要共享内存结构实现了管理自动化,减轻了手动配置这些组件的作量。除了更高效地利用可用内存,进而降低获取额外硬件内存资源所花费的成本以外,ASMM 功能还引进了更动态、更灵活和适应能力更强的内存管理方案,极大地简化了Oracle 数据库的管理。
例如,对于白天运行大型联机事务处理(OLTP) 作业(要求大型缓冲区高速缓存)和夜晚运行并行批处理作业(要求大型池的内存空间比较大)的系统,就必须同时配置缓冲区高速缓存和大型池,以便适应峰值需求。有了ASMM 功能,当OLTP 作业运行时,缓冲区高速缓存会获取大部分内存来保证良好的I/O 性能。以后启动数据分析和报告批处理作业时,内存又会自动移植到大型池,供并行查询操作使用,而不会产生内存溢出错误。
通过设置sga_target可以动态调整sga的结构,可调整的sga 组件如下:
Fixed SGA and other internal allocations needed by the Oracle Database instance
The log buffer
The shared pool
The Java pool
The buffer cache
The keep and recycle buffer caches (if specified)
Nonstandard block size buffer caches (if specified)
The Streams poolSQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 1500M
sga_target big integer 1500M