理解shared pool共享池
子池分割以及子heap分割
共享池可以通过以下两个角度来分割。
1.根据CPU以及共享池尺寸来分割子池(自动手动均可)
⇒ 因为共享池latch(每个池中各有一个)的竞争分散
CPU 数、共享池的共享分割
2.根据持续时间来对子heap进行分割(仅限自动)⇒ 通过使得持续时间较长的chunk一直存在,就可以防止碎片化
根据内存的持续时间来分割共享池
根据持续时间不同导致所储存的信息不同
子池的隐藏FREE区域(通称)
启动数据库之后会存在一个名为隐藏FREE(SubPool#0)的空白区域(Reserved Granule)。另外,在各个SubPool中也会分配一定的FREE区域。用V$SGASTAT观察到的FREE是包含SubPool#0的空白区域的总计。
SubPool#0的区域不会发生碎片化。
由于这些机制,指定的子池从隐藏FREE中获得区域的话,指定的子池就会无端扩张,产生尺寸偏差,导致发生ORA-4031。
共享池的FREE内存是指什么(v$sgastat.free memory)
隐藏FREE(Reserved Granule)持续使用的话,慢慢地就会被分割到数个SubHeap中,消失的区域
Reserved FREE通过设定shared_pool_reserved_size预约区域(默认是共享池的5%)
可以确保4400byte以上的chunk
FREEchunk
Free list中被连接的空白chunk,如果是区域的要求,无论何时都可以使用,但是,需要确保区域是连续区域。不足4400byte的chunk就会被确保下来
刷新LRU列表的机制