SGA 系统全局区

本文深入解析了Oracle数据库实例中关键内存区域——系统全局区(SGA)和进程全局区(PGA)的功能、组成及其内部工作原理,包括SGA中的各个部分如Buffer Caches、Shared Pool、Redo Log Buffer等的作用,以及PGA在共享服务器与专用服务器环境下的配置和用途。同时,文章介绍了如何通过参数如SGA_MAX_SIZE、SGA_TARGET、DB_CACHE_SIZE等来优化内存分配,提升数据库性能。
System Global Area 系统全局区

在数据库实例中,系统全局区是用户共享内存结构的一个集合.当实例启动后,基于初始化参数文件或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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值