ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Oracle 内存结构(一)

Oracle 内存结构(一)

原创 Linux操作系统 作者:Nalternative 时间:2011-02-17 13:23:52 0 删除 编辑

Oracle 在内存中存储以下信息:

1、程序代码

2、已连接的会话(session)信息,包括当前活动的(active)及非活动的会话

3、程序执行过程中所需的信息(例如,某个查询的状态)

4、需要在 Oracle 进程间共享并进行通信的信息(例如,锁信息)

5、数据文件内数据的缓存(例如,数据块(data block)及重做日志条目(redo log entry))

 

Oracle 中的基本内存结构包括:

系统全局区(System Global AreaSGA),此区域由所有的服务进程(server process)和后台进程(background process)共享。

程序全局区(Program Global AreasPGA),此区域是每个服务进程和后台进程所私有的;即每个进程都有一个 属于自己的 PGA

   

    软件代码区(software code area)。


1 、初始化参数 SGA_MAX_SIZE

SGA 中包含了多个内存组件component),每一组件都可以被看作为一个内存池,用于满足特定类型的内存分配请求。

所有 SGA 组件都是以预设的粒度(granule)为单位进行内存的分配与回收的。Oracle 数据库通过记录每个 SGA 组件使用的粒度单位的数量来掌握整个 SGA 的内存使用情况。

粒度单位的大小是由整个 SGA 的容量决定的。在大多数平台下,当 SGA 的容量小于 1GB 时,一个粒度单位为 4MB;当 SGA 的容量大于 1GB 时,一个粒度单位则为 16MB。但也有些平台例外。

A 所使用内存的上限由 SGA_MAX_SIZE 初始化参数决定。在实例初始化时,如果初始化参数文件(initialization parameter file)或服务器参数文件(server parameter file)中 SGA_MAX_SIZE 的值小于 Oracle SGA 各组件分配的内存之和,Oracle 将忽略 SGA_MAX_SIZE 参数。

为了优化系统性能,整个 SGA 的容量应与实际内存数量相符。如果因 SGA 过大而需要使用虚拟内存(virtual memory)时,数据库的系统性能将显著下降。


2 、共享全局区自动管理

Oracle 10g 中,DBA 只需使用 SGA_TARGET 参数指定实例可用的 SGA 总量即可,Oracle 能够自动地将内存分配给 SGA 的各个子组件,以便提高内存的使用效率。

SGA_TARGET 参数涵盖了 SGA 的全部内存,不要动态地设置 SGA_TARGET 参数。这个参数只能在数据库启动时设置。

少量的 SGA 内存组件容量是不能自动调整的。当应用需要时,DBA 要显式地设定这些组件的容量。这样的内存组件有:

保留/回收缓存区(Keep/Recycle buffer cache)(由 DB_KEEP_CACHE_SIZE DB_RECYCLE_CACHE_SIZE 参数控制)

非标准容量数据块使用的缓存(由 DB_nK_CACHE_SIZEn = {2481632} 参数控制)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25323853/viewspace-687415/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-02-09

  • 博文量
    123
  • 访问量
    178249