shared pool组成部分:free、library cache、row cache内存块工作模式


shared pool组成空间

1、free:空闲空间
2、librarycache:sql语句、执行计划缓存区
以上两个空间块实际工作中容易出现问题,也是需要管理和维护的重点。
3、rowcache:数据字典缓存区
此空间块不容出现问题。

需要说明的是,shared pool共享池的大小空间可以通过修改参数进行扩容的,而 library cache、row cache等无法直接进行大小空间的扩容,oracle会根据实际的使用情况,自动设置这两个的大小。

1、free空间内存的组成和组织管理

free空间不是一个大的控制内存块,
它由很多被分为不同大小的小内存块组成,
并使用链结构来分类管理。
它们按大小不同串在不同的链上(chain)
即内存块(chunk)都被挂在链上
在free空间挂的都是free的空闲内存块

每个链所挂的内存块的大小是不一样的。
从小到大形成一定的阶梯
如一个链上挂的是4K的内存块
一个链挂8k的,
一个链挂12k的。
4K链上的内存块大小就大于等于4K而小于8K
8K链上的内存块大小就大于等于8K而小于12K


解析一个sql语句时,
数据库会根据解析的sql语句,和sql语句的执行计划
计算出需要占用的实际空间。
这时我们需要一个空闲块,
如需要一个10K的空间
我们就在相应的8K的链上找10K的块
找到一个11K的大小合适,
但只需10K,
就把11K的分成两个 一个10K、一个1K
把sql语句和执行计划写到这个10K的块中,
并把这个块,放到librarycache中去。
剩下了一个1K的空闲内存块,把它挂在free空间的1K的链上。

硬解析的时候会发生刚才说的情况,
软解析不需要从free空间找chunk

2、 librarycache里存块的组织

librarycache里面也是用链来组织和管理chunk
链底下挂着chunk
这些chunk和free的chunk不一样
它不是空的,里面写有内容,内容是sql语句和执行计划plan
并且不是以大小来串起来的
而是以chunk所对应的sql语句运算以后得到的数字
挂到相应的链上
不管如何都是为了方便我们查找和管理

块在向链上挂时
首先把sql语句所有的字母转换成ASCII码值,
然后对这一堆数字进行一些运算,得到一个数字
这个数字就对应于链的编号。

如得到一个数字5,
我们就把这个sql语句及执行计划挂到5号链上。

再次执行这条sql语句时
oracle同样对这条sql语句求ASCII码值
并进行一些运算得到链的编号5
5号链挂了好多chunk,oracle就会锁住这个链
在链上进行遍历
最后会找到了这个chunk
就不会发生硬解析了,发生的是软解析

rowcache里面也是以链的方式来组织管理的

内存块存储有链,有链就有锁latch

3、 链

oracle里面有很重要的一个概念chain即链
链有几个特点,
1、它把我们需要组织的内存块串起来,
它们功能或者说特性类似
2、链可以遍历
因为链有头有尾,
所有的内存块都是挂到链上,
我们可以找到第一个块看看,再找第二个块看看,可以从头开始找到尾
就是可以遍历并在链上找到所有的块

oracle数据库内存结构里面
一个重要的特征就是使用了大量的链
并且在使用时用锁latch来保护链

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值