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

LARGE POOL的认识

2013年10月02日 ⁄ 综合 ⁄ 共 1228字 ⁄ 字号 评论关闭

author:skate
time: 2009/08/06


 

LARGE POOL

Large Pool是一种类似共享池的SGA缓冲池,和共享池不同的是,只有少量类型的对象可以再Large Pool中创建。

 

Large Pool的空间不在共享池中分配,是在数据库启动的时候另外分配的。Large Pool的大小由LARGE_POOL_SIZE确定。

 

Oracle数据库也可以不配置Large Pool。

 

从Oracle 8开始,Oracle数据库引入了Large Pool,在Oracle 8中,Large Pool的主要功能由两个:

 

1.         为MTS(共享服务器的早期版本)模式的会话分配UGA空间

 

2.        作为连续文件IO的缓冲,比如系统管理的恢复和rman备份恢复(当RMAN使用了多个IO SLAVES的时候)

 

从Oracle 8i开始,Large Pool增加了一个功能,就是为并行执行的操作提供缓冲区。当PARALLEL_AUTOMATIC_TUNING

 

设置为TRUE的时候,并行操作会在Large Pool中分配缓冲区空间。 ORACLE 9i中,Large Pool还被用来存储Oracle XA的相关信息。

 

Large Pool也使用shared pool闩锁,和共享池不同,Large Pool不使用LRU机制,因此Large Pool中的缓冲区不会

 

被换出,用户会话来控制分配和释放Large Pool的空间。如果Large Pool空间不足,会出现ORA-4031错误。

 

当系统中配置了Large Pool,那么共享服务器连接(MTS)只会在Large Pool中分配UGA空间,如果没有每只Large Pool,

 

那么共享服务器连接会在共享池中分配空间。当一个新的会话连接上来的时候,首先会在共享池中分配一个比较小的空间

 

(称为固定UGA空间,FIXED UGA),其他的动态UGA空间全部会在Large Pool中分配。如果Large Pool空间不足,会出现类似的错误:

 

    ORA-04031: unable to allocate 636 bytes of shared memory 

              ("large pool","EMPSCOTT","session heap","define var info")

 

在Large Pool中,空间是分段申请的,每段空间的最小值由LARGE_POOL_MIN

 

_ALLOC参数确定(该参数的取值范围为16k-64M,缺省为16k)。

 

Large Pool的大小由参数LARGE_POOL_SIZE确定。定义Large Pool的语法为:

 

LARGE_POOL_SIZE = integer [K | M]

 

如果没有配置,ORACLE的缺省值为0。LARGE_POOL_SIZE的取值范围是大于600K,最大值和操作系统的内存有关。

 

在一般情况下LARGE POOL使用需求不大,因此不必要设置过大的LARGE POOL。

-----end----

 

【上篇】
【下篇】

抱歉!评论已关闭.