oracle10g SGA

SGA管理

SGASystem Global Area)是一块用于加载数据、对象并保存运行状态和数据控制信息的一块区域,在数据库实例启动时分配,当实例关闭时释放,每个实例都有自己的SGA。连接到Oracle数据库的用户都可以共享SGA中的数据,通常为了优化性能,在物理内存允许的情况下设置更高的SGA,以减少物理I/O的读写次数。

1、 固定区域(Fixed Area

Fixed Area部分是SGA中的固定部分,包含几千个变量和一些小的数据结构,如Latch或地址指针等,这部分内存分配和特定的数据库版本以及平台有关,不受用户限制,而且这些信息对于数据库来说非常重要,但都不需要用户参与。

固定部分只需要很小的内存,可以通过一个内部表X$KSMFSV[K]ernel [S]ervice Layer [M]emery Management,Address of [F]ixed [S]GA [V]ariables)查询,此外,Oracle的内部表X$KSMMEM记录了整个SGA的地址映射关系,通过X$KSMFSVX$KSMMEM关联,可以找出Fixed Area中每个变量的设置。

Fixed Area包含很多控制信息,但是需要注意的是,查询X$KSMFSV视图可能导致进程异常,需要谨慎使用。

2、 Buffer Cache

Buffer Cache用于存储最近使用的数据块,这些数据块可能是被修改过的,也可能是未经修改的,在Oracle对数据的处理过程中,代价最昂贵的就是物理I/O的操作了,所以尽可能多的缓存可以提高Oracle数据库的性能。

Oracle9i之前,Buffer Cache的设置主要由两个参数决定:db_block_buffersdb_block_sizeDb_block_buffers设置分配给Buffer Cachedb_block数量,db_block_size指定数据块的尺寸。这两个数据的乘积才是Buffer Cache的大小。

Oracle9i开始,Oracle引入了一个新的初始化参数db_cache_size,该参数用来定义主Block_sizeDefault缓冲池的大小。

Db_cache_size最小值为一个粒度(Granule),粒度也是Oracle9i引入的一个新的概念,是连续虚拟内存分配的单位,其大小取决于估计的SGA的总大小。

Oracle10gR2中,Granule的分配算法有所改变,在大多数平台上,如果SGA<1GBGranule通常为4MBGranule的大小受一个内部隐含参数_ksmg_granule_size的控制。

Enter value for par: _ksmg_granule_size

NAME VALUE PDESC

------------------------------ ------------------------- ----------------------------------------

_ksmg_granule_size 4194304 granule size in bytes

各内存组件所使用的Granule大小可以通过动态视图查询得到,如下所示:

SQL> select component,granule_size from v$sga_dynamic_components;

COMPONENT GRANULE_SIZE

---------------------------------------------------------------- ------------

shared pool 4194304

large pool 4194304

java pool 4194304

streams pool 4194304

DEFAULT buffer cache 4194304

KEEP buffer cache 4194304

RECYCLE buffer cache 4194304

DEFAULT 2K buffer cache 4194304

DEFAULT 4K buffer cache 4194304

DEFAULT 8K buffer cache 4194304

DEFAULT 16K buffer cache 4194304

DEFAULT 32K buffer cache 4194304

ASM Buffer Cache 4194304

Oracle对于Buffer Cache的管理采用的LRU算法,但是这又带来另一个问题,很多批处理操作(如全表扫描)可能会导致Buffer Cache的刷新,将经常使用的数据“挤出”Buffer Cache,在不同的版本中,Oracle也在不停的改进LRU的算法,提出了多缓冲池技术,从另一个方面来解决这个问题。所谓的多缓冲池是将默认的缓冲池做进一步的细分,如下:

(1) Default Buffer Cache

(2) Keep Buffer Cache

(3) Recycle Buffer Cache

不同的缓冲池对数据的缓冲时间不同。对于经常使用的数据,可以在建表是就指定将其存放在Keep池中;对于经常一次性读取的数据,可以将其放在Recycle池中,而Default池用于存放未指定存储池的数据,按照LRU算法。

默认情况下,所有表都使用Default池,它的大小就是数据缓冲区Buffer Cache的大小,由初始化参数db_cache_size决定。

此外,从Oracle9i开始支持多类型数据块大小表空间支持,在一个数据库中可以存在多种block_size的表空间,分别支持2k

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24829399/viewspace-1051678/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24829399/viewspace-1051678/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值