Oracle Reading Note(二)

内存结构

3种主要的内存结构

SGA, System Global Area

PGA, Process Global Area

UGA, User Global Area, 存在于SGA(MTS模式)种或者UGA(专注服务模式)

PGA是一个ORACLE进程专属的内存区域, 它不能被其它的进程访问. PGA绝对不会超过SGA的区域.

UGA事实上就是你的session状态, 你的这个session可以访问的内存区域. UGA的位置取决于你配置的Server怎样接受连接, 如果是MTS模式, 那么UGS必须在一个所有用户都可以访问的内存区域中, SGA, 如果是专注服务模式, 那么UGS就基本等于PGA.

PGAUGA二者在大小上的差别最大之处应该取决与ini.ora或者是session级别的参数: SORT_AREA_SIZE, SORT_AREA_RETAINED_SIZE. 这两个参数控制了ORACLE在将数据写到磁盘之前用来排序数据的内存空间大小, 以及排序完毕以后由多少内存段依然保留. SORT_AREA_SIZE将会将会被分配在PGA里面, SORT_AREA_RETAINED_SIZE则在UGA.

exec dbms_session.free_unused_user_memory;强行释放内存

SGA

每个ORACLE实例都会有一大块的内存, 称为SGA, 这块内存区域所有的ORACLE进程都可以访问. UNIX环境下, 可以实实在在的看到这么一大块内存, 但是在WINDOWS环境下, 这块内存是依附于ORACLE.EXE进程下的. 我们可以通过数据字典V$SGASTAT大致查看SGA.

SGA可以分为以下几个区域:

JAVA: 为数据库的java虚拟机分配

大池: MTS用来管理session内存, 并发时候的消息缓冲, RMAM的磁盘缓冲

共享池: 共享游标, 存储过程, 实体状态, 字典缓存

其它: block buffer, redo log buffer, ‘fixed SGA’

ini.ora文件中对SGA影响最大的几个参数分别是:

JAVA_POOL_SIZE

SHARED_POOL_SIZE

LARGE_POOL_SIZE

DB_BLOCK_BUFFERS

LOG_BUFFER

除了SHARED_POOL_SIZE, LOG_BUFFER以外, ini,ora中参数值于实际内存中相应SGA区域的大小是一一对应的.

Fixed SGA

Fixed SGASGA的一个固件, 并且随着大小随着平台以及版本的不同而不同, 其中存储的是一系列的变量以及指向SGA其它部分的指针. Oracle安装的时候这部分就已经固定下来, 我们可以将这一部分看作是SGA引导区”.

Redo Buffer

Redo Buffer (Redo Log Buffer, Log Buffer)

那些需要贝写到在线重做日志的数据在写到磁盘之前会临时保存在这个区域中, 数据不会在这里存太久, 在以下情况中, Redo Buffer中的内容会被刷新到在线重做日志中:

1. 3

2. 有人commit

3. 达到1/3满或者缓存了1M以上的重做数据

所以数10MRedo Buffer通常是浪费内存, 因为根本不会被用到.很少有系统需要用到几M以上的Redo Buffer

Redo Buffer的默认大小(ini.oraLOG_BUFFER参数控制), 512K(128K * cpu数量)中的较大者, 最小值是当前操作系统支持的最大block大小的4.

select * from v$sgastat where name = ‘log_buffer’;

可以看到这个大小, 但是其实际大小:

select * from v$sga where name = ‘Redo Buffers’;

可能会稍微大一点.

因为它需要一些额外的空间来保护其自己.

Block Buffer Cache

这是SGA中一块最大的区域. 这个区域中通常管理着两个列表, “Dirty”(脏数据, 未写到磁盘)以及”No Dirty”(未更改的数据), “No Dirty”的算法比较复杂, 通常是最近用到的以及比较多用到的会比较靠前, 有一个”Touch Count”的概念, 我们可以在一些X$表中看到相关的缓存block信息.

X$BH表中的tch指的就是这个Touch Count.

Oracle8i以前整个Block Buffer就是一大块, 没法再分开. 但是后来添加了一个”Multiple Buffer Pool”的特性. 利用这个特性, 我们可以开辟出一块指定的空间来缓存我们制定的一些segment, 在这个区间中的block, 指会与制定的那些segment竞争, 而不需要与普通的data block竞争.我们称这一部分空间为Keep Pool. 另外, 我们还可以开辟出一块空间”Recycle pool”, 这块空间中的block管理机制与其它的不同, 其它pool我们都是保存最近使用最多的block, 而在这块空间中, 会尽快的淘汰那些没有使用的block. 这种机制对于那些大但又很少会读到的table很有用处, 因为将它们单独管理, 可以避免它们将那些其它的block buffer中的block冲掉.

[@more@]

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

转载于:http://blog.itpub.net/767125/viewspace-997324/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值