5) data blocks:对象的其他信息会存放在不同的heap中,为了找到这些heap,会在heap 0中存放多个(最多16个,但是这16个data block不会都用到)data blocks结构,每个data block含有指向这些实际heap内存块的指针。
除了heap 0以外,还有11个heap,根据对象的不同进行分配,并存放了不同的内容:
1) Heap 1:存放PL/SQL对象的源代码。
2) Heap 2:存放PL/SQL对象的解析树,这有个好听的名字: DIANA.
3) Heap 3:存放PL/SQL对象的伪代码。
4) Heap 4:存放PL/SQL对象的基于硬件的伪代码。
5) Heap 5:存放了编译时的错误信息。
6) Heap 6:存放了共享游标对象的SQL文本。
7) Heap 7:可用空间。
8) Heaps 8–11:根据对象的不同而使用的子heap.
我们可以通过查询v$db_object_cache来显示library cache中有哪些对象被缓存,以及这些对象的大小
尺寸。比如,我们可以用下面的SQL语句来显示每个namespace中,大小尺寸排在前3名的对象:
select *
from (select row_number() over(partition by namespace order by sharable_mem desc) size_rank,
namespace,
sharable_mem,
substr(name, 1, 50) name
from v$db_object_cache
order by sharable_mem desc)
where size_rank <= 3
order by namespace, size_rank;

