oracle实例内存结构由两部分组成SGA(系统全局区)和PGA(用户全局区)组成,SGA是一块共享的内存区域,也是最大的一块内存区域;PGA则是用户会话专有的内存区域,每个会话在服务器端都有一块专有的内存区域就是PGA。
一、PGA
程序全局区 (PGA):包含某个服务器进程或后台进程的数据及控制信息的内存区域。PGA 是 Oracle DB 在服务器进程或后台进程启动时创建的非共享内存。服务器进程对 PGA 的访问是互斥的。每个服务器进程和后台进程都具有自己的 PGA。包含如下结构:
1、Private SQL area:包含绑定信息、运行时的内存结构。每个发出sql语句的会话,都有一个private SQL area(私有SQL区)
2、Session memory:为保存会话中的变量以及其他与会话相关的信息,而分配的内存区。
二、SGA
系统全局区 (SGA):称为 SGA 组件的共享内存结构组,这些组件包含一个 Oracle DB 实例的数据和控制信息。SGA 由所有服务器和后台进程共享。SGA 中存储的数据示例包括高速缓存的数据块和共享 SQL 区域。
1、Database buffer cache:缓存了从磁盘上检索的数据块。
a) Keep buffer cache:保存buffer cache中存储的数据,使其尽时间可能长。
b) Recycle buffer cache:保存buffer cache中即将过期的数据。
c) nK block size buffer:为与数据库默认数据块大小不同的数据块提供缓存。用来支持表空间传输。
2、Redo log buffer:缓存了写到磁盘之前的重做信息。
3、Shared pool:缓存了各用户间可共享的各种结构。
4、Large pool:一个可选的区域,用来缓存大的I/O请求,以支持并行查询、共享服务器模式以及某些备份操作。
5、Java pool:保存java虚拟机中特定会话的数据与java代码。
6、Streams pool:由Oracle streams使用。