zoukankan      html  css  js  c++  java
  • 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存在限制)

    转载请注明来处

     

    流年笑掷 未来可期
  • 相关阅读:
    在SQLite中使用索引优化查询速度
    SQLite支持的SQL数据操作
    left (outer) join , right (outer) join, full (outer) join, (inner) join, cross join 区别
    深入理解Android内存管理原理(六)
    Merge Sorted Array
    Sort Colors
    Construct Binary Tree from Preorder and Inorder Traversal
    Binary Tree Postorder Traversal
    Symmetric Tree
    Rotate Image
  • 原文地址:https://www.cnblogs.com/nadian-li/p/14667134.html
Copyright © 2011-2022 走看看