Oracle 中的基本内存结构包括

  • 系统全局区(System Global Area,SGA),此区域由所有的服务进程(server process)和后台进程(background process)共享。
  • 程序全局区(Program Global Areas,PGA),此区域是每个服务进程和后台进程所私有的;即每个进程都有一个 属于自己的 PGA。

Oracle内存体系结构 1664793870.jpg

图1 中间为 SGA。其中包括 Java 池,数据缓存区,重做日志缓冲区,共享池,数据流池,及大型池。在 SGA 之外,存在服务进程,后台进程,及 Oracle 进程,她们能够和 SGA 交换信息。同时每个进程还需与其 PGA 通信。

 

SGA 中包含了多个内存组件(component),每一组件都可以被看作为一个内存池,用于满足特定类型的内存分配请求。举例来说,内存组件中包括共享池(shared pool)(为 SQL 及 PL/SQL 的执行分配内存),Java 池(java pool)(为 Java 对象及 Java 程序的执行分配内存),及数据缓存区(buffer cache)(用于缓存磁盘上的数据块)等。所有 SGA 组件都是以预设的粒度(granule)为单位进行内存的分配与回收的。Oracle 数据库通过记录每个 SGA 组件使用的粒度单位的数量来掌握整个 SGA 的内存使用情况。

 

手动与自动SGA管理