在数据库实例中,系统全局区是用户共享内存结构的一个集合.当实例启动后,基于初始化参数文件或Oracle软件代码撰写的大小为SGA分配内存. 如果设置了SGA_MAX_SIZE参数,整个SGA区大小不能超过SGA_MAX_SIZE参数值.若未设置,但SGA_TARGET参数被设置,则 Oracle自动调整SGA组件大小为该参数设置值.SGA_TARGET为一动态参数,可在运行过程中调整.MEMORY_TARGET为Oracle 11g新增的参数,在SGA和PGA区域之间协调所有可利用的内存,为优化Oracle数据库性能.
SGA内存分配以granule为单位,根据SGA的容量,granule可为4MB(SGA小于128MB)或16MB.
Buffer Caches 调整缓冲区
保持最近从磁盘读取或包含被修改的数据块.可动态修改参数DB_CACHE_SIZE和DB_nK_CACHE_SIZE的值为不同块大小的表空间提高处理性能.
Oracle可以使用默认块大小的另外的高速缓冲区:KEEP buffer pool和RECYCLE buffer pool, 从Oracle9i起,这两个缓冲区在SGA中分配内存不依赖于其他缓冲区.
你可以创建表的STORAGE语句中为表数据块指定缓冲区,对于频繁操作的表,建议使用KEEP缓冲区.
Shared Pool 共享池
共享池包含两个主要的缓冲区:library cache和data dictionary cache.共享池容量由初始化参数SHARED_POOL_SIZE指定,该参数可在SGA容量小于SGA_MAX_SIZE或SGA_TARGET数值时进行动态调整.
Library Cache保存在数据库运行的SQL和PL/SQL语句信息.连同SQL自身语句,SQL语句的执行计划和分析树都保存的Library Cache中.用户或其他用户再次运行相同SQL语句时,不需要再进行执行计划和分析.
Data Dictionary Cache存放数据库运行的动态信息.
Redo Log Buffer 重做日志缓冲区
保存数据文件中最近改变的数据块.当Redo Log Buffer三分之一满或每三秒,将缓冲区记录写入重做日志文件.用户事务的提交需在重做日志记录成功写入重做日志文件后完成.
Large Pool
为SGA中可选区域.在一定时间内为需要大块内存事务分配大块内存,用于多个数据库的事务处理, 并行查询进程间的消息缓冲,以及RMAN的并行备份和恢复作业.大小由初始化参数LARGE_POOL_SIZE(动态参数)控制.
Java Pool
使用Java时用到.用于缓存用户会话期间所有的Java代码和数据.Java代码和数据在Java Pool中的存储与Shared Pool中的缓冲区类似.
Streams Pool
保存Streams的数据和控制结构.Oracle Streams管理分布式环境中数据及事件的共享. 大小由初始化参数STREAMS_POOL_SIZE指定,若未指定或设为0, Streams操作将从共享池分配空间, 最多10%的共享池空间.
Program Global Area 进程全局区
PGA的配置取决于Oracle数据库的连接方式:shared server或dedicated.在shared server结构中,多个用户共享一个数据库连接,服务器内存使用最小,但用户响应时间可能受到影响.在该环境中,SGA取代PGA保存用户会话信息.
在dedicated服务结构环境,每个用户进程在数据库中获取连接.PGA包含该会话的内存配置.
PGA包含排序区,用于数据排序,位图合并,或哈希连接操作.
从Oracle9i起, 参数PGA_AGGREGATE_TARGET结合初始化参数 WORKAREA_SIZE_POLICY,可以减轻系统管理,允许DBA选择一个所有工作区域的总容量让Oracle在所有用户进程间管理和分配内存.
Software Code Area
存放oracle代码的区域,大小通常是固定的,只有当数据库更新或重安装时才会变化.该区域和用户程序的内存区域分开,且严格被保护.该区域为只读,且可被装成共享或非共享的.在相同软件版本的服务器上运行多个Oracle实例该区域将共享代码,节省内存.
Background Processes 后台进程
后台进程是设计用于完成特定任务的执行代码块.与SGA共同组成Oracle实例.
SMON 系统监听进程
在由于停电或CPU故障造成系统崩溃或者实例失败的情况下,SMON进程通过向数据文件应用重做日志文件中的记录执行故障恢复,另外,所有表空间的临时段在系统重启时被清除.
如果表空间采用字典管理则SMON进程的一项日常任务是定期合并表空间中的空余块.
PMON 进程监控
用户连接结束或用户进程失败的清除工作,清理用户连接使用的高速缓冲区以及任何其它资源.
DBWn 数据库写入进程
将高速缓冲区中的新的或改变的数据块(脏数据块)写入数据文件.使用LRU算法(最近最少使用算法),首先写入最旧的最少使用的数据块,因此对于最多被请求的块,即使为脏数据,也常驻内存.
最多可启动20个DBWn进程(DBW0-DBW9, DBWa-DBWj),启动的DBWn进程数由参数DB_WRITER_PROCESSES控制.
LGWR 日志写入
负责重做日志高速缓冲区管理,是大量DML行为实例中最活跃的一个进程.事务处理直到LGWR成功将重做信息写入重做日志文件后才响应完成.此外,高速缓冲区的脏数据直到LGWR完成重做信息的写入才被写入数据文件.
ARCn 归档进程
如果数据库处于ARCHIVELOG模式,ARCn进程备份重做日志文件.最佳情况是归档进程在重做日志重用前完成,否则带来严重的性能问题,因为 重做日志文件需要等待归档完成后才能被使用,至少有三种方案解决该问题:增大重做日志文件,增加重做日志组,增加ARCn进程.每数据库实例可增加初始化 参数LOG_ARCHIVE_MAX_PROCESSES的值最多启用10个ARCn进程.
CKPT 检查点进程
有助于减少数据库实例恢复时间.在检查点发生时,CKPT更新控制文件和数据文件以反映最后一个成功的SCN.这里并不是把当前检查点发生时候的 SCN更新进去,而是把上一次DBWn写入已经完成的检查点发生时候的SCN更新进去,也就是说,更新控制文件和数据文件头是滞后于检查点的发生.检查点 在每次重做日志文件切换时自动引发.
RECO 恢复进程
处理分布式事务的错误处理
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23190213/viewspace-660696/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23190213/viewspace-660696/
本文深入解析了Oracle数据库实例中关键内存区域——系统全局区(SGA)和进程全局区(PGA)的功能、组成及其内部工作原理,包括SGA中的各个部分如Buffer Caches、Shared Pool、Redo Log Buffer等的作用,以及PGA在共享服务器与专用服务器环境下的配置和用途。同时,文章介绍了如何通过参数如SGA_MAX_SIZE、SGA_TARGET、DB_CACHE_SIZE等来优化内存分配,提升数据库性能。
2194

被折叠的 条评论
为什么被折叠?



