ORACLE空間管理實驗4:塊管理之ASSM三級點陣圖結構

還不算暈發表於2014-01-27


L1、L2、L3塊的作用:--方便查詢資料塊。

L3中有指向L2的指標,L2有指向L1的指標,L1中有多個資料塊的指標和狀態。
1、每個L3中,有多個L2的地址(第一個L3是段頭)。
2、每個L2中,有多個L1的地址。
3、每個L1中,有多個資料塊地址。
ORACLE最多支援三級點陣圖。
一級點陣圖用於管理具體資料塊的使用。
二級點陣圖塊記錄了一級點陣圖塊的地址。
三級點陣圖塊記錄了二級點陣圖塊的地址。Segment Heade可以管理極大資料量的物件的空間,很難出現另一個三級點陣圖塊。


1.如何查詢段頭--第一個L3塊

BYS@ bys3>create tablespace test2 datafile '/u01/oradata/bys3/test22.dbf' size 10m;
Tablespace created.
BYS@ bys3>create table test2(aa varchar2(10)) tablespace test2;
Table created.
BYS@ bys3>insert into test2 values(789);
1 row created.
BYS@ bys3>commit;
Commit complete.
BYS@ bys3>select dbms_rowid.ROWID_BLOCK_NUMBER(rowid),dbms_rowid.ROWID_RELATIVE_FNO(rowid) ,aa from test2;
DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID) DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) AA
------------------------------------ ------------------------------------ ----------
                                 131                                    7 789
BYS@ bys3>select header_block,header_file fromdba_segments where segment_name='TEST2' and owner='BYS';
HEADER_BLOCK HEADER_FILE    -------從這語句找到段頭
------------ -----------
         130           7
BYS@ bys3>select object_id,data_object_id from dba_objects where object_name='TEST2' and owner='BYS';
 OBJECT_ID DATA_OBJECT_ID
---------- --------------
     23199          23199

BYS@ bys3>alter table test2 allocate extent (size 960k);
Table altered.
BYS@ bys3>alter system dump datafile 7 block 130;
System altered.
BYS@ bys3>select value from v$diag_info where name like 'De%';
VALUE
----------------------------------------------------------------------------------------------------
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_4215.trc
################

段頭--第一個L3塊的解讀:

Start dump data blocks tsn: 7 file#:7 minblk 130 maxblk 130
Block dump from cache:  ---這段是BUFFER CACHE的BLOCK HEADER資訊,參考:http://blog.csdn.net/haibusuanyun/article/details/17525523
Dump of buffer cache at level 4 for tsn=7 rdba=29360258
BH (0x20fe6d64) file#: 7 rdba: 0x01c00082 (7/130) class: 4 ba: 0x20cb6000
  set: 3 pool: 3 bsz: 8192 bsi: 0 sflg: 1 pwc: 0,0
  dbwrid: 0 obj: 23199 objn: 23199 tsn: 7 afn: 7 hint: f
  hash: [0x2a39d804,0x2a39d804] lru: [0x217f7ccc,0x21befb08]
  lru-flags: on_auxiliary_list
  ckptq: [NULL] fileq: [NULL] objq: [0x21befb20,0x22beab34] objaq: [0x2443a408,0x2
1befb28]
  st: XCURRENT md: NULL fpin: 'ktswh03: ktscts' tch: 2
  flags: block_written_once redo_since_read
  LRBA: [0x0.0.0] LSCN: [0x0.0] HSCN: [0xffff.ffffffff] HSUB: [1]
Block dump from disk:  --下面的才是物理資料檔案中內容
buffer tsn: 7 rdba: 0x01c00082 (7/130)
scn: 0x0000.0082b051 seq: 0x01 flg: 0x04 tail: 0xb0512301
frmt: 0x02 chkval: 0xf0d6 type: 0x23=PAGETABLE SEGMENT HEADER  --資料塊型別:段頭
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB6BC0600 to 0xB6BC2600
B6BC0600 0000A223 01C00082 0082B051 04010000  [#.......Q.......]--B6BC0600 0000A223,這裡的23,是資料塊中的塊頭的塊型別的資訊,與type: 0x23=對應。
        Repeat 185 times -------省略了大部分無關輸出
B6BC25F0 00000000 00000000 00000000 B0512301  [.............#Q.]
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 18     #blocks: 384   --有18個區,384個塊==16個區-8 個塊,2個區-128個塊,16*8+2*128=384
                  last map  0x00000000  #maps: 0      offset: 2716  
      Highwater::  0x01c00088  ext#: 0      blk#: 8      ext size: 8     
      高水位的塊DBA--0x01c00088 -136號塊,是第二個區的第一個塊。插入只會插入高水位以下的塊<=,以區為單位推進--也可能是區的一半-據說演算法很複雜。查詢時也會找到高水位,查詢高水位下的塊。   
併發插入時候,高水位的位置會影響限制併發插入,因為只能插入高水位以下的塊,如8KBLOCK時;1M區,128個塊,超過128個併發會有熱塊,從而產生buffer busy waits.; 如果是8M的區,會有1024個塊,超過1024併發同樣會有熱塊產生。

  #blocks in seg. hdr's freelists: 0     
  #blocks below: 5     
  mapblk  0x00000000  offset: 0     
                   Unlocked
  --------------------------------------------------------
  Low HighWater Mark :   --低高水位,低高水位之下的資料都已經使用了。低高水位和高水位之間,有的資料塊已經使用,有的未使用-未格式化。 格式化是在塊頭加:OJBECT號,資料字典中:dba_objects.DATA_OBJECT_ID
      Highwater::  0x01c00088  ext#: 0      blk#: 8      ext size: 8     
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 5     
  mapblk  0x00000000  offset: 0     
  Level 1 BMB for High HWM block: 0x01c00080
  Level 1 BMB for Low HWM block: 0x01c00080
  --------------------------------------------------------
  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0      
  L2 Array start offset:  0x00001434
  First Level 3 BMB:  0x00000000
  L2 Hint for inserts:  0x01c00081   ----二級點陣圖塊的DBA,換算為:0000 0001 1100 ,前10位檔案號是二進位制111-十進位制7,16進位制81--十進位制129.插入時會選擇這個L2下的L1的塊,直到此L2下的所有L1中的塊用完,才會用其它L2--在此處更改L1的DBA。
  Last Level 1 BMB:  0x01c00181
  Last Level II BMB:  0x01c00081
  Last Level III BMB:  0x00000000
     Map Header:: next  0x00000000  #extents: 18   obj#: 23199  flag: 0x10000000
  Inc # 0
  Extent Map  --區地圖,段下有幾個區,區的起始地址以及包含的塊數
  -----------------------------------------------------------------
   0x01c00080  length: 8     
   0x01c00088  length: 8     
   0x01c00090  length: 8     
   0x01c00098  length: 8     
   0x01c000a0  length: 8     
   0x01c000a8  length: 8     
   0x01c000b0  length: 8     
   0x01c000b8  length: 8     
   0x01c000c0  length: 8     
   0x01c000c8  length: 8     
   0x01c000d0  length: 8     
   0x01c000d8  length: 8     
   0x01c000e0  length: 8     
   0x01c000e8  length: 8     
   0x01c000f0  length: 8     
   0x01c000f8  length: 8     
   0x01c00100  length: 128   
   0x01c00180  length: 128   
 
  Auxillary Map --輔助表區由哪個L1管理及所管理的區-資料塊的起始位置DBA--非Metadata塊始地址。。輔助區地址可看出哪幾個區內的塊共用同一個L1,如下:
  --------------------------------------------------------
   Extent 0     :  L1 dba:  0x01c00080 Data dba:  0x01c00083 --131,第一個可用的塊的地址
   Extent 1     :  L1 dba:  0x01c00080 Data dba:  0x01c00088 --136,可以看到這個L1和上一個L1相同,一個L1管理了兩個區。

   Extent 2     :  L1 dba:  0x01c00090 Data dba:  0x01c00091 --145
   Extent 3     :  L1 dba:  0x01c00090 Data dba:  0x01c00098
   Extent 4     :  L1 dba:  0x01c000a0 Data dba:  0x01c000a1
   Extent 5     :  L1 dba:  0x01c000a0 Data dba:  0x01c000a8
   Extent 6     :  L1 dba:  0x01c000b0 Data dba:  0x01c000b1
   Extent 7     :  L1 dba:  0x01c000b0 Data dba:  0x01c000b8
   Extent 8     :  L1 dba:  0x01c000c0 Data dba:  0x01c000c1
   Extent 9     :  L1 dba:  0x01c000c0 Data dba:  0x01c000c8
   Extent 10    :  L1 dba:  0x01c000d0 Data dba:  0x01c000d1
   Extent 11    :  L1 dba:  0x01c000d0 Data dba:  0x01c000d8
   Extent 12    :  L1 dba:  0x01c000e0 Data dba:  0x01c000e1
   Extent 13    :  L1 dba:  0x01c000e0 Data dba:  0x01c000e8
   Extent 14    :  L1 dba:  0x01c000f0 Data dba:  0x01c000f1
   Extent 15    :  L1 dba:  0x01c000f0 Data dba:  0x01c000f8
   Extent 16    :  L1 dba:  0x01c00100 Data dba:  0x01c00102  --128個塊了,L1一個管理 一個區在8KB BLOCK,8M的區時,一個L1管理可以1024個塊,再大的區就未實驗過了。
   Extent 17    :  L1 dba:  0x01c00180 Data dba:  0x01c00182
  --------------------------------------------------------
 
   Second Level Bitmap block DBAs
   --------------------------------------------------------
   DBA 1:   0x01c00081      --二級點陣圖塊的DBA,這裡只有一個L2,如果有多個L2,都會在這裡顯示出來的。
End dump data blocks tsn: 7 file#: 7 minblk 130 maxblk 130   
  #################################################3

DUMP L2塊--根據段頭找到L2的DBA

BYS@ bys3>alter system dump datafile 7 block 129;
System altered.
BYS@ bys3>select value from v$diag_info where name like 'De%';
VALUE
----------------------------------------------------------------------------------------------------
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_4982.trc
#######
Start dump data blocks tsn: 7 file#:7 minblk 129 maxblk 129
Block dump from cache:
Dump of buffer cache at level 4 for tsn=7 rdba=29360257
Block dump from disk:
buffer tsn: 7 rdba: 0x01c00081 (7/129)
scn: 0x0000.0082b04b seq: 0x03 flg: 0x04 tail: 0xb04b2103
frmt: 0x02 chkval: 0xcf4e type: 0x21=SECOND LEVEL BITMAP BLOCK   --L2
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB6B43600 to 0xB6B45600
B6B43600 0000A221 01C00081 0082B04B 04030000  [!.......K.......]  0000A221中21與type: 0x21=  對應
        Repeat 496 times
B6B455F0 00000000 00000000 00000000 B04B2103  [.............!K.]
Dump of Second Level Bitmap Block
   number: 12      nfree: 12      ffree: 0      pdba:     0x01c00082     --父DBA,也就是L3的地址-130號塊,   number: 12     --L1的總數,nfree: 12--空閒的L1個數,
   Inc #: 0 Objd: 23199
  opcode:1
 xid:
  L1 Ranges :--多個L1時,按L1 DBA順序插入/////???????插入資料時:再根據PID進行HASH,得到一個隨機值,根據此值選擇L2中的L1--受高水位影響的
  --------------------------------------------------------
   0x01c00080  Free: 5 Inst: 1     ---128號塊,Free: 5標記L1中可用空間狀態
   0x01c00090  Free: 5 Inst: 1          --144號塊,Free: 0 FULL狀態

   0x01c000a0  Free: 5 Inst: 1
   0x01c000b0  Free: 5 Inst: 1
   0x01c000c0  Free: 5 Inst: 1
   0x01c000d0  Free: 5 Inst: 1
   0x01c000e0  Free: 5 Inst: 1
   0x01c000f0  Free: 5 Inst: 1
   0x01c00100  Free: 5 Inst: 1
   0x01c00101  Free: 5 Inst: 1
   0x01c00180  Free: 5 Inst: 1
   0x01c00181  Free: 5 Inst: 1
 
  --------------------------------------------------------
End dump data blocks tsn: 7 file#: 7 minblk 129 maxblk 129

#####################################

DUMP L3塊--根據L2中的  L1 Ranges的找到 第一個L1塊的DBA

BYS@ bys3>alter system dump datafile 7 block 128;
System altered.
BYS@ bys3>select value from v$diag_info where name like 'De%';
VALUE
----------------------------------------------------------------------------------------------------
/u01/diag/rdbms/bys3/bys3/trace/bys3_ora_5162.trc
@@@@@@@@@@@@@@@
Start dump data blocks tsn: 7 file#:7 minblk 128 maxblk 128
Block dump from cache:
Dump of buffer cache at level 4 for tsn=7 rdba=29360256
Block dump from disk:
buffer tsn: 7 rdba: 0x01c00080 (7/128)
scn: 0x0000.0082afe2 seq: 0x01 flg: 0x04 tail: 0xafe22001
frmt: 0x02 chkval: 0x9d2d type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xB6CBD600 to 0xB6CBF600
B6CBD600 0000A220 01C00080 0082AFE2 04010000  [ ...............]  0000A220的20,表示:type: 0x20=FIRST LEVEL BITMAP BLOCK
B6CBD610 00009D2D 00000000 00000000 00000000  [-...............]
B6CBD620 00000000 00000000 00000000 00000000  [................]
        Repeat 1 times
        Repeat 8 times
B6CBD780 00000000 00000000 00000000 55551511  [..............UU]
B6CBD790 00000000 00000000 00000000 00000000  [................]
        Repeat 485 times
B6CBF5F0 00000000 00000000 00000000 AFE22001  [............. ..]
Dump of First Level Bitmap Block
 --------------------------------
   nbits : 4 nranges: 2         parent dba:  0x01c00081   poffset: 0     --parent dba: 上一級DBA,L2的地址——129號塊
   unformatted: 8       total: 16        first useful block: 3      
   owning instance : 1
   instance ownership changed at 01/22/2014 11:22:40
   Last successful Search 01/22/2014 11:22:40
   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
   Dealloc scn: 3.0
   Flag: 0x00000001 (-/-/-/-/-/HWM)
   Inc #: 0 Objd: 23199
  HWM Flag: HWM Set
      Highwater::  0x01c00088  ext#: 0      blk#: 8      ext size: 8     高水位在 0x01c00088  136號塊,下一個區的第一個塊
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 5     
  mapblk  0x00000000  offset: 0     
  --------------------------------------------------------
  DBA Ranges :   --這個L1管理的資料塊的範圍
  --------------------------------------------------------
   0x01c00080  Length: 8      Offset: 0      
   0x01c00088  Length: 8      Offset: 8      
 
   0:Metadata   1:Metadata   2:Metadata   3:75-100% free      ---Metadata 是無資料,這裡存放的是L3 L2 L1的塊。
   4:75-100% free   5:75-100% free   6:75-100% free   7:75-100% free   
   8:unformatted   9:unformatted   10:unformatted   11:unformatted
   12:unformatted   13:unformatted   14:unformatted   15:unformatted      可以DUMP 12和5,對比格式化與未格式化的差別。
在L1塊中關於資料塊的狀態有7種格式:Unformat       75-100%       50-75%       25-50%      0-25%   FULL    Metadata
  --------------------------------------------------------
End dump data blocks tsn: 7 file#: 7 minblk 128 maxblk 128

相關文章