shared_pool知识点整理
sub_pool的数量是Oracle根据shared_pool大小初始化出来的,也可以通过 _kghdsidx_count控制
子缓冲池分配的算法很简单:
l 每个子缓冲池必须满足一定的内存约束条件;
l 每 4 颗 CPU 可以分配一个子缓冲池, 子缓冲池的数量最多 7 个。
Oracle 9i 中,每个 SubPool 容量至少 128MB, 而在 Oracle 10g 中,每个子缓冲池容量至少为 256MB。从 Oracle 11g 开始,每个 SubPool 至少为 512MB。
在 Oracle 10g 中, Oracle 仍然对共享池的管理做出了进一步改进,那就是对单个子缓冲池进行进一步的细分。现在默认 Oracle 10g 会将单个缓冲池分割为 4 个子分区进行管理(这可能是因为通常 4颗 CPU 才分配一个 SubPool)
pSub Pool:
启动时根据CPU个数和内存大小,会自动分为N个Sub Pool( N<=7)
目的是为了减少每个Latch管理的内存个数,减少搜索的争用
可用参数"_kghdsidx_count"控制
初始Free memory不属于任何子池、Sub Pool间内存不可共享
pDurations:(也就是subpool中那四个内存组件)
随着自动SGA调整开启:duration是否需要开启要根据实际情况来判断,开启后无法缩小,但可以避免单个duration满引起的4031
11g及之前分为4个区域,存放不同保留期限的内存组件:instance, session, cursor, execution
12c及打了补丁的变成两个区域instance+session+cursor, execution
目的用于自动SGA调整,原则上自从execution的durations里面减少内存(KGH: NO ACCESS)
可用参数"_enable_shared_pool_durations"控制
Duration之间内存不可共享
pReserved:
用于大内存块申请,避免碎片
_shared_pool_reserved_pct 、shared_pool_reserved_size、shared_pool_reserve_min_alloc
为什么会在一个 subpool中还有4个 sub partition 如:
sga heap(1,0) sga heap(1,1) sga heap(1,2) sga heap(1,3)
这不是因为 cpu的数目 也不是因为_kghdsidx_count, 而是因为 在10g 中AUTO SGA 引入了 shared pool duration的概念,
duration 分成4类:
Session duration
Instance duration (never freed)
Execution duration (freed fastest)
Free memory
引入了 shared pool duration的目的是
在10gR1中Shared Pool的shrink收缩操作存在一些缺陷,造成缺陷的原因是在该版本中Buffer Cache还没有能力共享使用一个granule,这是因为Buffer Cache的granule的尾部由granule header和Metadata(可能是buffer header或者RAC中的Lock Elements)拼接组成,在其尾部不容许存在空洞。另一个原因是当时的shared pool允许不同生命周期duration(以后会介绍)的chunk存放在同一个granule中,这造成共享池无法完全释放granule。到10gR2中通过对Buffer Cache Granule结构的修改允许在granule header和buffer及Metadata(buffer header或LE)存在缝隙,同时shared pool中不同duration的chunk将不在共享同一个granule,通过以上改进buffer cache与shared pool间的内存交换变得可行。此外在10gr2中streams pool也开始支持内存交换(实际根据不同的streams pool duration存在限制)
转载请注明来处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)