ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ASSM BMB

ASSM BMB

原创 Linux操作系统 作者:paynefu 时间:2013-06-29 13:30:35 0 删除 编辑
ASSM中的三级位图块,L1、L2和L3,第一个L3是段头。
L3中保存L2的地址,L2保存L1的地址,L1中记录数据块的空闲状态。
插入操作在寻找可用块时,Oracle会依次查找L3、L2和L1。在L3中寻找L2是根据L2 Hint for inserts:  0x0140061a,而从L2中寻L1是通过process id用hash算法得到的hash值来实现的。从L1中寻数据块也是通过process id hash后的值来实现。
L3包括多个L2,L2包括多个L1。
(1)创建了一个log_table表,查询到该表的段头块地址,dump出来
select header_file,header_block from dba_segments where segment_name='LOG_TABLE' and wner='FB';
HEADER_FILE HEADER_BLOCK
----------- ------------
          5         1563
alter system dump datafile 5 block 1563;
*** 2013-05-20 10:16:44.765
*** SERVICE NAME:(SYS$USERS) 2013-05-20 10:16:44.734
*** SESSION ID:(138.166) 2013-05-20 10:16:44.734
Start dump data blocks tsn: 6 file#: 5 minblk 1563 maxblk 1563
buffer tsn: 6 rdba: 0x0140061b (5/1563)
scn: 0x0000.00106bda seq: 0x01 flg: 0x00 tail: 0x6bda2301
frmt: 0x02 chkval: 0x0000 type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1

Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0     
  L2 Array start offset:  0x00001434
  First Level 3 BMB:  0x00000000
  L2 Hint for inserts:  0x0140061a            —————————— 将选择的L2地址
  Last Level 1 BMB:  0x01400619
  Last Level II BMB:  0x0140061a
  Last Level III BMB:  0x00000000
     Map Header:: next  0x00000000  #extents: 1    obj#: 53506  flag: 0x10000000
  Inc # 0
  Extent Map
  -----------------------------------------------------------------
   0x01400619  length: 8    
 
  Auxillary Map
  --------------------------------------------------------
   Extent 0     :  L1 dba:  0x01400619 Data dba:  0x0140061c
  --------------------------------------------------------
 
   Second Level Bitmap block DBAs
   --------------------------------------------------------
   DBA 1:   0x0140061a             —————————————— L2块地址

 

再把L2 dump出来
Start dump data blocks tsn: 6 file#: 5 minblk 1562 maxblk 1562
buffer tsn: 6 rdba: 0x0140061a (5/1562)
scn: 0x0000.00106bd9 seq: 0x01 flg: 0x04 tail: 0x6bd92101
frmt: 0x02 chkval: 0x516e type: 0x21=SECOND LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1

 
 Dump of Second Level Bitmap Block
   number: 1       nfree: 1       ffree: 0      pdba:     0x0140061b
   Inc #: 0 Objd: 53506
  opcode:0
 xid:
  L1 Ranges :
  --------------------------------------------------------
   0x01400619  Free: 5(若为1,则L1中数据块已经满了) Inst: 1             ————————   L1块地址
 
  --------------------------------------------------------

 

再把L1块DUMP出来

Start dump data blocks tsn: 6 file#: 5 minblk 1561 maxblk 1561
buffer tsn: 6 rdba: 0x01400619 (5/1561)
scn: 0x0000.00106bda seq: 0x01 flg: 0x04 tail: 0x6bda2001
frmt: 0x02 chkval: 0x472e type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1


Dump of First Level Bitmap Block
 --------------------------------
   nbits : 4 nranges: 1         parent dba:  0x0140061a   poffset: 0    
   unformatted: 5       total: 8         first useful block: 3     
   owning instance : 1
   instance ownership changed at
   Last successful Search
   Freeness Status:  nf1 0      nf2 0      nf3 0      nf4 0     
 
   Extent Map Block Offset: 4294967295
   First free datablock : 3     
   Bitmap block lock opcode 0
   Locker xid:     :  0x0000.000.00000000
   Inc #: 0 Objd: 53506
  HWM Flag: HWM Set
      Highwater::  0x0140061c  ext#: 0      blk#: 3      ext size: 8    
  #blocks in seg. hdr's freelists: 0    
  #blocks below: 0    
  mapblk  0x00000000  offset: 0    
  --------------------------------------------------------
  DBA Ranges :
  --------------------------------------------------------
   0x01400619  Length: 8      Offset: 0     
 
   0:Metadata   1:Metadata   2:Metadata   3:unformatted
   4:unformatted   5:unformatted   6:unformatted   7:unformatted
  --------------------------------------------------------
End dump data blocks tsn: 6 file#: 5 minblk 1561 maxblk 1561


可以看到L1中包含8个数据块的地址,5个块都是未格式化的数据块



通过实验可验证到:L1指向块地址的数量与其段(如表)的大小有关,随着表数据的增加,L1指向块地址数量逐步增加,当表中没有数据时,L1可能指向块地址数量为8个或16个或64个等等(上面是自动分配的EXTENT,为64K,指向的块地址数量是8个,通过把EXTENT设置为2M,发现L1指向块地址数量是64个,L1的初始块指针数量可能与区的初始大小有关,具体还需要实验一下),当表中数据小于64M时,L1中最多指向64个数据块的地址,大于64M后,最多指向256个数据块的地址(需要实验一下)。
下面是我把表数据增加后,dump出来的L1块
Dump of First Level Bitmap Block
 --------------------------------
   nbits : 4 nranges: 2         parent dba:  0x0140061a   poffset: 2    
   unformatted: 0       total: 16        first useful block: 1     
   owning instance : 1
   instance ownership changed at 05/20/2013 11:58:25
   Last successful Search 05/20/2013 11:58:25
   Freeness Status:  nf1 1      nf2 0      nf3 0      nf4 7     
 
   Extent Map Block Offset: 4294967295
   First free datablock : 8     
   Bitmap block lock opcode 0
   Locker xid:     :  0x0000.000.00000000
   Inc #: 0 Objd: 53506
  HWM Flag: HWM Set
      Highwater::  0x01400649  ext#: 5      blk#: 8      ext size: 8    
  #blocks in seg. hdr's freelists: 0    
  #blocks below: 43   
  mapblk  0x00000000  offset: 5    
  --------------------------------------------------------
  DBA Ranges :
  --------------------------------------------------------
   0x01400639  Length: 8      Offset: 0     
   0x01400641  Length: 8      Offset: 8     
 
   0:Metadata   1:FULL   2:FULL   3:FULL
   4:FULL   5:FULL   6:FULL   7:FULL
   8:75-100% free   9:0-25% free   10:75-100% free   11:75-100% free
   12:75-100% free   13:75-100% free   14:75-100% free   15:75-100% free
变成16个了

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/27135177/viewspace-765107/,如需转载,请注明出处,否则将追究法律责任。

上一篇: oracle listener
请登录后发表评论 登录
全部评论

注册时间:2012-08-01

  • 博文量
    26
  • 访问量
    74628