Oracle的内存结构分为SGA和PGA,对于SGA是动态分配的,通过参数sga_max_size进行配置,在oracle数据库实例启动的时候就已经分配好,对于所有的会话连接共享一个SGA;对于PGA则是每个用户的会话连接创建一个自己的PAG的内存区域。
Shared Pool:存放最近执行过的sql语句的执行结构(执行计划)已经数据定义(数据字典).主要组成分为library cache,data dictionary cache。其中大小的决定参数是shared_pool_size。
对于library cache主要是存放shared sql area 和 shared pl/sql area 这两个区域块
对于 data dictionary cache 主要是用于存放数据系统,系统的动态性能视图和系统表
对于SGA的重头戏 database buffer cache 主要是用来存放data数据文件的数据块,把硬盘中的数据读取直接存放到内存中,提高数据的操作速度。对于用户对数据的操作,首先是找database buffer cache中的数据,如果可以找到就直接返回数据,不再从硬盘中找,提高数据响应速度。反应数据库性能的一个重要指标就是database buffer cache的命中率.其中主要的参数有:db_keep_cache_size,db_cache_size,db_recycle_cache_size
Redo log buffer:是数据文件redo log的缓存,如果需要恢复数据,读取redo log 文件的话,会先从 redo log buffer 里面读取数据库的操作记录。对于数据库的操作记录也是先写入到redo log buffer,然后在存储到 数据文件 redo log files 中
Larger pool: Rman备份的时候会使用larger pool 进行数据的缓存,某些server procees 的I/O操作也是需要使用larger pool 进行数据的缓存。
Java pool: 大小决定于参数java_pool_size,对于oracle中使用java语言写的方法在执行的时候就是使用java pool这个存储区域。该缓存区域主要是用于java的相关操作。