首页 > 数字化转型 > ERP > 自动段空间管理-eygle循序渐进记载
自动段空间管理:
Oracle9I后推出自动段空间管理,原来自由列表被位图所取代,通过位图能够迅速有效管理存储数据扩展和剩余区块block。
在手工管理表空间时,需要insert和delete自由列表freelist,并通过pctfree和pctused参数来判断一个block移除和加载到freelist中,这样操作肯定会带来自由列表的竞争。在ASSM管理下,insert通过扫描数据文件头部的位图查找可用block,即使可用空间低于pctfree也不会被位图上移除,因此后续的pctused参数也不再需要。低于Pctfree的数据块将用于已有数据的更新,所以freelist和freelist group参数在ASSM中都无效了。
ASSM管理段空间用位图数组来管理分配到每个对象的块,而每个块的剩余空间是由位图的状态判断,例如75%,50%~75%,25~50%,<25%,至于什么时候利用数据块则由设定的pctfree来决定。
使用ASSM管理段空间,位图管理首先是以前的段头freelist的竞争,增强了dml等sql的并发执行速度,因为位图数据的不同部门可以同时被使用,减少了寻找空间的串行化。
ASSM管理机制中,前面的本地管理表空间知道了,数据文件中头两个数据块为数据文件头,
3~8个数据块为区位图块,块9和块10就是ASSM位图块。
一级位图块用于管理具体数据块的使用,也就是第9个数据块
Alter system dump datafile 4 block 9;
。。。
Start dump data blocks tsn: 4 file#: 4 minblk 9 maxblk 9
buffer tsn: 4 rdba: 0x01000009 (4/9)
scn: 0x0000.0004d22f seq: 0x02 flg: 0x04 tail: 0xd22f2002
frmt: 0x02 chkval: 0x79e9 type: 0x20=FIRST LEVEL BITMAP BLOCK
Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 1 parent dba: 0x0100000a poffset: 0
unformatted: 0 total: 8 first useful block: 3
owning instance : 1
instance ownership changed at 03/10/2004 17:05:34
Last successful Search 03/10/2004 17:05:34
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 5
Extent Map Block Offset: 4294967295
First free datablock : 3
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 49047
HWM Flag: HWM Set
Highwater:: 0x01000011 ext#: 0 blk#: 8 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 5
mapblk 0x00000000 offset: 0
--------------------------------------------------------
--------------------------------------------------------
0x01000009 Length: 8 Offset: 0
0:Metadata 1:Metadata 2:Metadata 3:75-100% free
4:75-100% free 5:75-100% free 6:75-100% free 7:75-100% free
--------------------------------------------------------
End dump data blocks tsn: 4 file#: 4 minblk 9 maxblk 9
从最后面的dba ranges可以看出:这个位图管理了8个数据块,地址范围从0x01000009开始,其中(0~2)block用于存储元数据(记录数据的数据),其余用来存储数据,full表示块已经用完,type: 0x20=FIRST LEVEL BITMAP BLOCK看出是第一级数据位图。
同样一级位图也需要管理又引出了二级位图,也就是parent dba: 0x0100000a记录的二级位图的位置,也就是块10.
Alter system dump datafile 4 block 10
。。。
frmt: 0x02 chkval: 0x39bf type: 0x21=SECOND LEVEL BITMAP BLOCK
Dump of Second Level Bitmap Block
number: 1 nfree: 1 ffree: 0 pdba: 0x0100000b
Inc #: 0 Objd: 49047
opcode:0
xid:
L1 Ranges :
--------------------------------------------------------
0x01000009 Free: 5 Inst: 1
--------------------------------------------------------
End dump data blocks tsn: 4 file#: 4 minblk 10 maxblk 10
type: 0x21=SECOND LEVEL BITMAP BLOCK代表此数据块是个二级位图地址,Li Ranges记录的是一级位图的位置,也就是这个数据扩展的第一个数据块,在这个块内同样包含一个上级位图块地址pdba:0x0100000b,块11.
Alter system dump datafile 4 block 11
。。。
Start dump data blocks tsn: 4 file#: 4 minblk 11 maxblk 11
buffer tsn: 4 rdba: 0x0100000b (4/11)
scn: 0x0000.0004d22f seq: 0x02 flg: 0x04 tail: 0xd22f2302
。。。
frmt: 0x02 chkval: 0x141c type: 0x23=PAGETABLE SEGMENT HEADER
Extent Map
-----------------------------------------------------------------
0x01000009 length: 8
Auxillary Map
--------------------------------------------------------
Extent 0 : L1 dba: 0x01000009 Data dba: 0x0100000c
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x0100000a
块11正式数据段的段头信息,块头中记录了哪些位图块管理单位被包含在对象中。
type: 0x23=PAGETABLE SEGMENT HEADER次数据块是个段头信息。所以通常segment header 也被看作是第一个level 3位图块,存储二级位图块的地址,如果segment header无法存储二级块位图块的指针,将产生真正独立的三级位图块。
Oracle10I的缺省创建的tablespace都是用ASSM管理,默认的SYSTEM和temporary tablespace ,undo tablespace还是采取MSSM管理。
以上内容都是查看eygle的循序渐进书籍的记载然后自己操作得到,开始看dump数据块可能不是很懂。
个人的一些理解:
一个扩展有一系列数据块组成,其中的扩展的第一个数据块也就是一级位图的块地址,记录的是此扩展的块信息,然后如果一个段有多个扩展,就会产生多个一级位图,同样需要对一级位图进行维护,也就是二级位图的产生,段头信息中也就是段内的第三个数据块中记录的是那些位图管理的块,当segment header无法容纳二级位图时就产生真正的三级位图,通过上述位图来管理段内block的!
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1054617/ ,如需转载,请注明出处,否则将追究法律责任。