ORACLE空間管理實驗4:塊管理之ASSM三級點陣圖結構
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 130Block 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
相關文章
- Oracle assm三級點陣圖結構解析OracleSSM
- ORACLE空間管理實驗5:塊管理之ASSM下高水位的影響--刪除和查詢OracleSSM
- Oracle 自動段空間管理(ASSM)OracleSSM
- ORACLE空間管理實驗1:探索LMT表空間管理下資料檔案頭的結構及點陣圖中區的記錄方式Oracle
- ORACLE空間管理實驗6:塊管理之ASSM下插入操作--高水位的影響及大併發插入的效能問題OracleSSM
- zt_eygle大師_assm三級點陣圖塊體系架構bitmap blockSSM架構BloC
- ORACLE空間管理實驗7:塊管理之MMSM--為什麼SYSTEM/UNDO/TEMP是MMSM管理?Oracle
- ORACLE空間管理實驗8:資料塊格式分析--DUMP結合BBEDOracle
- assm:Oracle 10g的自動段空間管理SSMOracle 10g
- Oracle 10g的自動段空間管理(ASSM)Oracle 10gSSM
- ORACLE空間管理實驗2:區的管理與分配Oracle
- ASSM表空間FIRST LEVEL BITMAP BLOCK點陣圖標誌位意義SSMBloC
- Oracle 本地表空間管理與字典表空間管理Oracle
- Oracle的UNDO表空間管理總結Oracle
- Oracle表空間管理Oracle
- Oracle 表空間管理Oracle
- Oracle的邏輯結構(表空間、段、區間、塊)——表空間Oracle
- Oracle基礎結構之表空間Oracle
- Oracle的邏輯結構(表空間、段、區間、塊)——Oracle資料塊(二)Oracle
- 探索ORACLE_之表空間02_管理Oracle
- Oracle undo 表空間管理Oracle
- Oracle 表空間的管理Oracle
- oracle undo表空間管理Oracle
- Oracle的表空間管理Oracle
- 本地管理表空間的bitmap結構測試
- ORACLE空間管理實驗3:區管理之大區小區對I/O效能的影響Oracle
- 偽造基於ASSM表空間的資料塊SSM
- Oracle OCP(49):表空間管理Oracle
- oracle表空間日常操作管理Oracle
- oracle本地管理的表空間Oracle
- 淺說Oracle PGA空間管理Oracle
- oracle表空間管理維護Oracle
- oracle 段空間管理問題Oracle
- Informix入門之 -空間管理ORM
- 本地表空間管理優點vs資料字典表空間管理(轉載)
- 邏輯表空間管理結構(Logical Storage Structures)Struct
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於表空間Oracle資料庫
- 表空間管理之bigfile表空間設定