Buffer Cache缓存对象

前言

  书接上回:Insert 引起的 db file sequential read 文章讲到解决的思路可以将索引缓存到keep buffer cache中,于是本文章做了个简单的Buffer Cache整理。

Buffer Cache里的缓冲池:

Default、Keep和Recycle三个子池会共享Buffer Cache大小

  • 默认:DEFAULT buffer cache 此池始终存在。它相当于没有保留池和回收池的实例的缓冲区高速缓存,可通过DB_CACHE_SIZE 参数进行配置。

  • 保留:KEEP buffer cache 此池用于保留内存中可能要重用的对象。将这些对象保留在内存中可减少 I/O操作。通过使池的大小大于分配给该池的各个段的总大小,可以将缓冲区保留在此池中。这意味着缓冲区不必执行过期处理。保留池可通过指定DB_KEEP_CACHE_SIZE参数的值来配置。

  • 回收:RECYCLE buffer cache 此池用于内存中重用几率很小的块。回收池的大小要小于分配给该池的各个段的总大小。这意味着读入该池的块经常需要在缓冲区内执行过期处理。回收池可通过指定DB_RECYCLE_CACHE_SIZE 参数的值来配置。(本人基本没用过,暂不在此处做测试)

注:保留池或回收池中的内存不是默认缓冲池的子集。

默认池:DEFAULT buffer cache

测试一:缓存对象

SQL> -- 查看对像大小: SQL> select segment_name, round(sum(bytes) / 1024 / 1204 / 1024,2)|| 'GB' as size_GB 2 from dba_segments 3 where segment_name in 4 ('PK_ID') 5 group by segment_name; SEGMENT_NAME SIZE_GB ------------------------ --------------- PK_ID 3.83GB