oracle内存结构学习记录——SGA

学oracle内存很久了,每次学完过一阵子就忘(实地优化机会太少),这次学完记录下,以备以后复习。

oracle内存结构

oracle内存结构分为SGA、PGA、UGA,总架构图如下:


SGA



SGA又分为Database Buffer Cache、Redo Log Buffer、Shared Pool、 Large Pool、Java Pool、Streams Pool、Fixed SGA,下面就我自己的理解对这几个模块简要分析(网上很多文章都是先介绍BufferCache后介绍SharedPool,我觉得应该按照一条sql语句来到dbms的顺序来介绍,所以我先介绍SharedPool)。

Shared Pool

SharedPool

sharedPool分为LibraryCache、DataDictionaryCache、ServerResultCache、ReservedCache。

具体流程是,一条sql语句先走到libraryCache,分析执行计划,首先对sql语句进行hash运算,如果得到的值在ShareSQLArea中 存在,就取出这条执行计划进入下一步,这个过程叫软解析。如果不存在,则重新进行sql语句执行计划的分析与选取,要生成可取得执行计划并且从这些执行计划中选出最优的执行计划,这个过程叫硬解析,是消耗CPU的。所以当第一次生成执行计划后,便在ShareSQLArea中缓存了。
接下来带着执行计划去得到执行结果,这里面会经由ServerResultCache,这里面缓存的是执行计划的执行结果,但是oracle默认不开启这项,可能是由于每条执行计划得到的结果集的大小不同,如果某些执行计划的结果集太大,会撑满内存,所以如果需要这个功能,可以人为开启。
拿到了结果集,就可以返回给用户了,但是这个过程中还要把这次从db中读到的数据写到bufferCache里面。
这里面的区别是,ServerResultCache存储的是sql执行计划的结果,而buffercache存储的是db中数据块的值。
这里面还有一些空间,DataDictionaryCache又名rowcache,存储的是数据库字典,比如表结构,字段类型之类的,这地方基本上不存在调优的细节问题,只是为了以后确定这些表结构不需要去db中取了。
ReservedCache我不了解,还没细查,有空去学习下。

BufferCache

Buffer cache 里面存放这从磁盘上读到内存中的数据块,这些数据块可以被所有的会话访问,是全局共享的。

刚才说到sql生成sql执行计划,那么得到执行计划后,怎样去db取数据呢?答案是先到buffercache中找,如果buffercache中没有,再去db中取,如果是从db中取到的,那么先写入到buffercache再返回给用户。buffercache就是db到内存的缓存,所以这里面会存在脏数据的问题,这个后面我再介绍。

buffercache里面还分 Default pool(默认空间,用LRU清理),Keep pool(始终存在于内存中,不清理), Recycle pool(存放一些不经常使用的数据块,避免这些数据块在Default pool池中占据空间),还有2k区、4k区、16k区,是为了更有效使用空间,(尽量将每个空间利用充分),每个区里面是链式存储,defaultpool默认是8k区。


LargePool

large pool对数据的处理不使用LRU算法,对于LargePool里面存了什么、用了怎样的清理方式我还不清楚,有空再细查下。具体存在的目的应该就是为了区分缓存的大对象和小对象,大对象不应该经常清理,其清理过程比较消耗资源。

Redo log buffer

Redo log buffer 中存放这数据库产生的redo数据。Redo log buffer以循环的方式写入,当redo log已经写到磁盘后,就可以被后续的日志数据覆盖。具体redo的存在意义我会在后面介绍。

Streams Pool

这个东西据我所知就是用于各个oracle实例之间进行通信用到的,因为他们之间通信用的是数据流通信,具体用户我还没研究,大概猜测是用于HA,在后面接好的RAC中应该有说明。

 Java pool

可以运行java的代码,尚未研究。

 Fixed SGA

尚未研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值