(8)ASSM

作者: sflovely1314 | 来源:发表于2018-05-31 22:20 被阅读12次

    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可以支持大并发插入的原因。

    相关文章

      网友评论

          本文标题:(8)ASSM

          本文链接:https://www.haomeiwen.com/subject/ohpcsftx.html