首页 > Linux操作系统 > Linux操作系统 > Oracle 内存结构(一)
Oracle 在内存中存储以下信息:
1、程序代码
2、已连接的会话(session)信息,包括当前活动的(active)及非活动的会话
3、程序执行过程中所需的信息(例如,某个查询的状态)
4、需要在 Oracle 进程间共享并进行通信的信息(例如,锁信息)
5、数据文件内数据的缓存(例如,数据块(data block)及重做日志条目(redo log entry))
Oracle 中的基本内存结构包括:
系统全局区(System Global Area,SGA),此区域由所有的服务进程(server process)和后台进程(background process)共享。
程序全局区(Program Global Areas,PGA),此区域是每个服务进程和后台进程所私有的;即每个进程都有一个 属于自己的 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_SIZE,n = {2,4,8,16,32} 参数控制)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25323853/viewspace-687415/ ,如需转载,请注明出处,否则将追究法律责任。