(8)ASSM

2018-05-31  本文已影响12人  sflovely1314

ASSM(automatic segment space management)自动空闲空间管理,实在Oracle 9i中首次被引入使用。在每个segment上会有一条freelist(或者多条,一般情况下一条就够用了)来管理空闲的block。使用block时,可能会根据需要把块放在freelist上或者从freelist上去除。只有位于hwm(高水位线)以下的对象块才会出现在freelist中,只有当freelist为空才会使用hwm之上的块,此时Oracle会推进hwm,并把这些块增加到freelist中。

ASSM的整体结构是3层位图块+数据块,如图。

FreeList

一个L3块中可以存放多个L2块的地址,一个L2块可以存放多个L1块的地址,一个L1块可以存放多个数据库的地址。

第一个L3块一般是段头,如果段头存放了太多L2块的信息空间不足,则会再分配第二个L3块。

在数据插入时,如果需要申请空闲块,则会按照以下步骤进行:

1.查找数据字典,确定段头的位置;

2.在段头中找到第一个L2块的位置信息;

3.到L2块中根据执行插入操作进程的pid号做hash运算,得到一个随机数n,在L2中,找到第n个L1块的位置信息。

4.到第3步中确定的L1块中,再根据执行插入操作进程的pid号做hash运算,得到一个随机数m,在L1中找到第m号数据块。

5.向第m号数据库块中插入数据。

L3块中虽然有很多L2块,但插入的时候,每次只会选择同一个L2块,直到这个L2被插满了,才会选择下一个L2块。

在L2中选择L1时,对于不同的session,只要有可能,就会被分配到不同的L1中,在L1中查找数据块时也是一样。这也是Oracle宣称ASSM可以支持大并发插入的原因。

上一篇下一篇

猜你喜欢

热点阅读