现在的位置: 首页 > 综合 > 正文

Oracle数据库实例SGA内存结构以及初始化参数的设置

2013年10月27日 ⁄ 综合 ⁄ 共 1353字 ⁄ 字号 评论关闭

 

        严格来讲,Oracle数据库分为两部分,一部分是数据库,包括存储数据的一些物理文件,如数据文件,控制文件,日志文件等;另一部分就是数据库实例,主要是指一些操作系统进程以及其管理的系统内存区。

这里主要说一些数据库实例的结构。

        数据库实例的内存结构包括两部分:SGA(系统全局区,System Global Area)和PGA(进程全局区,Process Global Area),SGA用来存放操作的数据、库缓存、数据字典等控制信息,大部分内容是被几乎所有的Oracle进程所共享的,PGA是服务进程专用的内存,大部分是不被共享的。还用一部分用来保存用户会话信息的内存UGA(用户全局区,UserGlobal Area),如果数据库的连接模式为专用服务器模式,则UGA保存在PGA中是PGA的一部分,如果是共享服务器模式,则保存在SGA中。

 

SGA内存结构图

 

        在设置SGA各部分的内存时,Oracle是以一种叫做力度(Granule)的单位来分配的,一般来说SGA小于1GB,一个粒度为4MB,SGA大于1GB时,一个粒度为16MB,不过对于32bit的windows平台,SGA大于1GB时,一个粒度为8MB。在给各部分分配内存时,必须是粒度的整数倍,例如:假设粒度为4MB,如果你在设置参数设置为2MB,那么Oracle也会自动把实际分配的值调整为4MB。

可以在视图V$SGA_DYNAMIC_COMPONENTS中,通过GRANULE_SIZE字段查看,如:

        在修改各部分对应的参数的值时,一定要保证不能超过SGA的最大值,即(sga_max_size):

        修改sga_max_size的值:

                     alter system set sga_max_size =650M scope = spfile;

        修改完成以后需要重启Oracle实例该参数的值才能生效,windows环境下如果不能顺利重启,那么重启电脑就可以了。但是如下参数是可以在实例运行过程中进行修改的:

DB_CACHE_SIZE

SHARE_POOL_SIZE

JAVA_POOL_SIZE

LARGE_POOL_SIZE

STREAMS_POOL_SIZE

SGA_TARGET

        在Oracle 10g版本以后,Oracle数据库通过参数SGA_TARGET参数,可以在实例运行的过程中自动地调整各部分的内存,当然也并不是所有的SGA中的内存区都能被SGA_TARGET所控制,只有如下5个部分的内存大小才能在实例运行中被Oracle数据库动态调整:

DB_CACHE_SIZE

SHARE_POOL_SIZE

JAVA_POOL_SIZE

LARGE_POOL_SIZE

STREAMS_POOL_SIZE

        要启动内存的自动管理,只要将SGA_TARGET参数设置为非0,如果为0,那么oracle将按照DBA指定的大小进行分配,这样即便是在实例运行的时候这部分区域空闲也不会分配给其他内存紧张的部分来使用。另外还需要将参数STATISTICS_LEVEL设置为TYPICAL或者ALL,让Oracle能够收集足够的信息来作为动态调整内存的依据。

抱歉!评论已关闭.