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