Oracle内存体系结构

Oracle 中的基本内存结构包括

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

Oracle内存体系结构

图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管理

  • 手动管理SGA,DBA 需要手工地设置 SGA 各个组件的容量,可能根据应用的改变,需要重新分配各个组件的大小
  • 自动管理SGA,无需向系统中添加额外的资源,也无需增加手工维护的工作量,就能提高系统的负载能力。比如,在 SGA 手工管理模式下,一个已编译的 SQL 语句可能会因为共享池空间不足而被频繁的移出共享池,导致系统性能降低。而使用了 SGA 自动管理后,Oracle 内部的调优算法将监控系统的负载情况,如果发现增大共享池有利于减少重复的 SQL 解析(parse)操作,就会对相关的 SGA 组件进行调整,为共享池分配更多的内存。

数据缓冲区的管理方式

——通过两个列表管理:

  1. 待写列表(write list)。 待写列表中记录的是脏缓冲区(dirty buffer),即其中数据已被修改且尚未写入磁盘的缓冲区。
  2. 最近最少使用列表(least recently used(LRU)list)。 最近最少使用列表中记录的是可用缓冲区(free buffer),锁定缓冲区(pinned buffer),及还没被移入待写列表的脏缓冲区。 可用缓冲区内的数据无需继续保留,可以用于存储新数据。而 锁定缓冲区是正在被访问的缓冲区。

重做日志缓冲区概念

  • 重做日志缓冲区(redo log buffer)是 SGA 内一块被循环使用的缓冲区,用于记录数据库内的数据变化信息。这些信息以重做条目(redo entry)的形式进行存储。Oracle 利用重做条目内的信息就可以重做由 INSERT,UPDATE,DELETE,CREATE,ALTER,及 DROP 等操作对数据库进行的修改。重做条目可以被用于进行数据库恢复(database recovery)。

 

你可能感兴趣的:(oracle)