龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > Oracle 技术 >

Oracle数据库SGA的一些笔记

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
SGA 和 Oracle 的每一个实例对应,实例启用则系统分配一个SGA,在实例关闭的时候回收。服务器端所有的历程以及Oracle的后台历程均可拜会SGA,局部的历程有写SGA的权限。 SGA中有一局部的

SGA Oracle的每一个实例对应,实例启用则系统分配一个SGA,在实例关闭的时候回收。服务器端所有的历程以及Oracle的后台历程均可拜会SGA,局部的历程有写SGA的权限。 SGA中有一局部的内存,叫做Fixed SGA,其中包括了数据库实例的事态。

SGA 包括以下几个局部:

Buffer Cache

重要储藏block数据的拷贝,对所有用户分享。 在这个cache中所有的block重要以两个队列的数据构造保留。

Write List: 储藏一些曾经被修正的数据(dirty data)。

LRU List: 保留三局部消息: 空block, pinned buffer(猜该当是没修正的,正处理的),dirty buffer(还未曾被迁移到Write List-- 这里就能够看出把buffer从LRU List到Write List的挪动并不是实时的,而是有一个引发的过程1)。

流程描写如下:一个DB的process试图读取一个block的内容,率先会查询buffer cache看里面是否有对应的block, 万一有则直接读取(cache hit),万一未曾的话,就会在LRU List里面从LRU端开始寻找轻便的空buffer,万一碰到了Dirty Buffer,则移到Write List(解释了上标1),然后继续寻找。万一找到轻便的free buffer,就将block装载到buffer cache中,万一最后未曾找到,就动身DBW0事件,将dirty buffer写入到磁盘中。

等闲理况下buffer cahce会将新的block储藏的LRU的MRU端(最新拜会),然而万一是全表扫描,则会将新读入的blocks纳入到LRU端(全表扫都是多个blocks同时读取,而非单block读取--参见书COB第19页)。万一想要全表扫时放到MRU端,则需在select语句中指定利用'cache'。例如:SELECT last_name FROM employees hr_emp;

Redo Log Buffer

储藏一些redo的消息,这些消息能够redo语句insert/update/delete/alter/create/drop,redo buffer是由db process从用户内存中拷贝到redo log buffer,这个buffer挪借了继续的空间,redo log buffer由LGWR写到redo log中。

Share Pool

重要包括Library cache,Data cache,result cache(11g新出来的)。

Library cache 包括Shared SQL areas,Private SQL areas (万一是利用shared server),pl/sql的procedure和package,以及一些扼制消息例如锁,最后还有library cache的handle。

Share SQL Area是针对所有用户,而Private SQL Area对每一个用户都有一个独自的copy.华擎在Shared SQL Area中,Oracle存储sql的分析树和厉行计划,当一个新的sql被分析时,Oracle从Share SQL Area中分配一个空间,空间大小随sql的混杂度而改变,万一空间不足www.d1am.com的话,Oracle会依据LRU算法释放本来挪借的空间而分配给新的sql.

对于一些plsql过程段,oracle也是一样看待,在Share SQL Area中分析,在Private SQL Area中存储相干的变量及SQL的厉行空间。在PLSQL过程段中的sql,也会分配一个自力更生的Share SQL Area 和Private SQL Area.

刷新share sql area的几个措施:

1.利用analyze 语句。

2.sql中引用的对象被改换。

3.database 的 global name被改换。

4.alter system flush shared_pool。

关于Oracle数据库SGA的知识的总结就介绍这么多,希望能够带给您一些收获吧。

精彩图集

赞助商链接