• 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存在限制)

    转载请注明来处

     

    流年笑掷 未来可期
  • 相关阅读:
    VS2019 开发CMake项目
    node实验1
    DX9动画加载
    Excel表格的自动化处理和推送(二)信息分发
    案例分享:Excel表格的自动化处理和推送
    快速信息分发应用分发工资条明细
    在EasySQLMAIL中实现表格的行列转置
    从命令行启动EasySQLMAIL中的信息推送任务
    version `GLIBCXX_3.4.20' not found 解决方法
    【面试系列】如何保障质量之测试左移右移
  • 原文地址:https://www.cnblogs.com/nadian-li/p/14667134.html
Copyright © 2020-2023  润新知