oracle的内存结构,大家都知道,SGA+PGA,那么现在我们来看看oracle的SGA的组成.

SGA在instance启动的时候建立,是instance的基本组件,并且由shared pool,data buffer cache,redo log buffer以及其他部分组成,在9i开始,数据库支持动态内存管理,也就是说,在数据库中,可动态的调整shared pool,data buffer cache,以及large pool的大小,当然,其要求是所有sga的组件的总和不超过sga_max_size的限制.注意了,这里是不包括redo log buffer的,也就是说,你要修改redo log buffere的大小,就必须重启数据库,当然,我不知道这个是不是因为和redo log buffer的大小的调整非常少有关系,一般来说,通过调整redo log buffer来提高性能的情况确实也是十分少见的.

在oracle的内存结构中,还有一个关键的地方,sga分配的时候,是有一个最小粒度的,也就是说,每次最少要分配这个最小的粒度,那么,对于SGA小于128M的,这个数值是4M,其他的就都是16M了,也就是说,分配的时候,我们可以尽量是这两个数字的整数,那么理论上应该可以避免内存的浪费或者是碎片.

这里有个有趣的东西就出来了,一个oracle数据库,最小可以分配多少sga?12M,这个就是最小的了,不能比这个还小,理论依据是,首先,既然是讨论最小的sga,那么,他的最小的粒度是4M,而oracle最少要分配一个给fixed SGA,一个给data buffer cache ,一个给shared pool,也就是最少3个,那就是4M*3=12M了.

 



 


Write a comment

You need tologin.