翻出來了 老東西了 , oracle 資料庫解析 extent 資料結構解析
Oracle extent 的擴充套件原理與內部結構解析
------------------------- LSLIANG PCONLINE.COM.CN
先建立測試環境 (sunos solaris sparc 10 , oracle 10.2.0.3 ,sun v890 )
LSLIANG at sunha5 > create tablespace lsl datafile '/oracle/oradata/sunha5/test.dbf' size 10m;
Tablespace created.
LSLIANG at sunha5 > alter user lsliang default tablespace lsl;
User altered.
LSLIANG at sunha5 > create table test(id number ,name varchar2(100) );
Table created.
LSLIANG at sunha5 > select * from dba_extents where owner='LSLIANG';
OWNER
------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
PARTITION_NAME SEGMENT_TYPE TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
EXTENT_ID FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
---------- ---------- ---------- ---------- ---------- ------------
LSLIANG
TEST
TABLE LSL
0 46 9 65536 8 46
LSLIANG at sunha5 > alter system dump datafile 46 block 9 ;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 10 ;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 11 ;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 12 ;
System altered.
LSLIANG at sunha5 >
Trace file
Start dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9
buffer tsn: 22 rdba: 0x0b800009 (46/9)
scn: 0x0001.000ee871 seq: 0x01 flg: 0x00 tail: 0xe8712001 標準資料塊頭(20bytes)
frmt: 0x02 chkval: 0x0000 type: 0x20=FIRST LEVEL BITMAP BLOCK /* 塊型別:一級點陣圖塊*/
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00
FFFFFFFF7A01FE00 20A20000 0B800009 000EE871 00010100 [ ..........q....] /* standard block head 20bytes*/
FFFFFFFF7A01FE10 00000000 00000000 00000000 00000000 [................]
Repeat 2 times
FFFFFFFF7A01FE40 00000000 00000000 00000000 04000000 [................]
FFFFFFFF7A01FE50 FFFFFFFF 00000005 00000003 00000008 [................]
FFFFFFFF7A01FE60 01000001 00000000 00000000 00000000 [................]
FFFFFFFF7A01FE70 00000000 00000003 00000000 00000000 [................]
FFFFFFFF7A01FE80 00000000 00000000 00000000 00000000 [................]
FFFFFFFF7A01FE90 0B80000A 00000000 00000000 00000003 [................] / *dump 出這些資料塊的結構的,因為還沒有實際的資料,所以我們還不能
FFFFFFFF7A01FEA0 00000008 0B80000C 00000000 00000000 [................] 確定這些結構的內容和他們代表的意思 ,繼續向下看 */
FFFFFFFF7A01FEB0 00000000 00000000 00000000 00000001 [................]
FFFFFFFF7A01FEC0 000102FF 00000000 00000000 0B800009 [................]
FFFFFFFF7A01FED0 00000008 00000000 00000000 00000000 [................]
FFFFFFFF7A01FEE0 00000000 00000000 00000000 00000000 [................]
Repeat 9 times
FFFFFFFF7A01FF80 00000000 00000000 00000000 11100000 [................]
FFFFFFFF7A01FF90 00000000 00000000 00000000 00000000 [................]
Repeat 485 times
FFFFFFFF7A021DF0 00000000 00000000 00000000 E8712001 [.............q .]
Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 1 parent dba: 0x0b80000a 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: 66303 /*object_id 對應於dba_object表的object_id */
HWM Flag: HWM Set /* 高水平線 hwm */
Highwater:: 0x0b80000c ext#: 0 blk#: 3 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 0
--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x0b800009 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: 22 file#: 46 minblk 9 maxblk 9
*** 2008-06-07 14:46:14.129
Start dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10
buffer tsn: 22 rdba: 0x0b80000a (46/10)
scn: 0x0001.000ee870 seq: 0x01 flg: 0x00 tail: 0xe8702101
frmt: 0x02 chkval: 0x0000 type: 0x21=SECOND LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00
FFFFFFFF7A01FE00 21A20000 0B80000A 000EE870 00010100 [!..........p....] /* 這裡似乎也看不出什麼東西出來。不用急,繼續向下看 */
FFFFFFFF7A01FE10 00000000 00000000 00000000 00000000 [................]
Repeat 2 times
FFFFFFFF7A01FE40 00000000 00000000 00000000 0B80000B [................]
FFFFFFFF7A01FE50 00000001 00000001 00000000 00000000 [................]
FFFFFFFF7A01FE60 00000000 00000000 000102FF 00000001 [................] / * object_id */
FFFFFFFF7A01FE70 00000000 0B800009 05000001 00000000 [................]
FFFFFFFF7A01FE80 00000000 00000000 00000000 00000000 [................]
Repeat 502 times
FFFFFFFF7A021DF0 00000000 00000000 00000000 E8702101 [.............p!.]
Dump of Second Level Bitmap Block
number: 1 nfree: 1 ffree: 0 pdba: 0x0b80000b
Inc #: 0 Objd: 66303
opcode:0
xid:
L1 Ranges :
--------------------------------------------------------
0x0b800009 Free: 5 Inst: 1
--------------------------------------------------------
End dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10
*** 2008-06-07 14:46:30.471
Start dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11
buffer tsn: 22 rdba: 0x0b80000b (46/11)
scn: 0x0001.000ee871 seq: 0x01 flg: 0x00 tail: 0xe8712301 /* standard block head */
frmt: 0x02 chkval: 0x0000 type: 0x23=PAGETABLE SEGMENT HEADER /* 塊型別: segment head (段頭 或者說是表頭)*/
Hex dump of block: st=0, typ_found=1
Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00
FFFFFFFF7A01FE00 23A20000 0B80000B 000EE871 00010100 [#..........q....]
FFFFFFFF7A01FE10 00000000 00000000 00000000 00000000 [................]
FFFFFFFF7A01FE20 00000000 00000001 00000008 0A9C0000 [................]
FFFFFFFF7A01FE30 00000000 00000003 00000008 0B80000C [................]
FFFFFFFF7A01FE40 00000000 00000000 00000000 00000000 [................]
Repeat 1 times
FFFFFFFF7A01FE60 00000003 00000008 0B80000C 00000000 [................]
FFFFFFFF7A01FE70 00000000 00000000 00000000 0B800009 [................]
FFFFFFFF7A01FE80 0B800009 00000000 00000000 00000000 [................]
FFFFFFFF7A01FE90 00000000 00000000 00000000 00000000 [................]
Repeat 3 times
FFFFFFFF7A01FED0 00010000 00002000 00000000 00001434 [...... ........4]
FFFFFFFF7A01FEE0 00000000 0B80000A 00000001 0B800009 [................]
FFFFFFFF7A01FEF0 0B80000A 00000000 00000000 00000000 [................]
FFFFFFFF7A01FF00 00000000 00000000 00000001 00000000 [................]
FFFFFFFF7A01FF10 000102FF 10000000 0B800009 00000008 [................]
FFFFFFFF7A01FF20 00000000 00000000 00000000 00000000 [................]
Repeat 152 times
FFFFFFFF7A0208B0 0B800009 0B80000C 00000000 00000000 [................]
FFFFFFFF7A0208C0 00000000 00000000 00000000 00000000 [................]
Repeat 151 times
FFFFFFFF7A021240 00000000 00000000 0B80000A 00000000 [................]
FFFFFFFF7A021250 00000000 00000000 00000000 00000000 [................]
Repeat 185 times
FFFFFFFF7A021DF0 00000000 00000000 00000000 E8712301 [.............q#.]
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 8
last map 0x00000000 #maps: 0 offset: 2716
Highwater:: 0x0b80000c ext#: 0 blk#: 3 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 0
Unlocked
--------------------------------------------------------
Low HighWater Mark : / * 字面意思看起來是高水平線 繼續向下看 * /
Highwater:: 0x0b80000c ext#: 0 blk#: 3 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 0
Level 1 BMB for High HWM block: 0x0b800009 /* 這裡的hight 就是我們的高水平線了,
Level 1 BMB for Low HWM block: 0x0b800009 low 的意思什麼? 我也不知道,向下繼續看。 */
--------------------------------------------------------
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x0b80000a
Last Level 1 BMB: 0x0b800009
Last Level II BMB: 0x0b80000a /* 還有3級點陣圖塊 ??? 看起來象哦,至少目前中國大陸正在跑的oracle 資料庫中還沒有出現過這個型別的塊
Last Level III BMB: 0x00000000 oracle 考慮的夠遠的,連未來都考慮到裡面去了 ,厲害*/
Map Header:: next 0x00000000 #extents: 1 obj#: 66303 flag: 0x10000000
Inc # 0
Extent Map /這裡記錄了 這個段(表)的extent的map(地圖?) 其實就是地址(RDBA) 了
-----------------------------------------------------------------也就是說,我只要知道了這個段頭(表的第一個資料塊,似乎也不對,就先這樣了),我們就知道了這個表開始的地方了,
0x0b800009 length: 8 既然段是 有extent組成的,那麼我們知道了這個地圖,我們就知道了這個段的所有的extent了??(這個可以向下看稍候
再說) 裡面記錄了這個段,由一個extent組成,長度/大小是 8個資料塊(block) */
Auxillary Map
--------------------------------------------------------
Auxillary Map
--------------------------------------------------------
Extent 0 : L1 dba: 0x0b800009 Data dba: 0x0b80000c
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x0b80000a
End dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11
*** 2008-06-07 14:46:40.860
Start dump data blocks tsn: 22 file#: 46 minblk 12 maxblk 12
buffer tsn: 22 rdba: 0x0000000c (0/12)
scn: 0x0000.00000000 seq: 0x01 flg: 0x05 tail: 0x00000001 /* standard block head */
frmt: 0x02 chkval: 0x01aa type: 0x00=unknown /塊型別: unknow */
Hex dump of corrupt header 4 = CORRUPT
Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A01FE14 / * 這是因為我們還沒有向表裡寫資料,所以這些塊還沒有使用
FFFFFFFF7A01FE00 00A20000 0000000C 00000000 00000105 [........... 自然也不知道將來會分給什麼官給他做
FFFFFFFF7A01FE10 01AA0000 [....] 所以unknow 的意思應該是儲備幹部 */
Hex dump of block: st=4, typ_found=0
Dump of memory from 0xFFFFFFFF7A01FE00 to 0xFFFFFFFF7A021E00
FFFFFFFF7A01FE00 00A20000 0000000C 00000000 00000105 [................]
FFFFFFFF7A01FE10 01AA0000 00000000 00000000 00000000 [................]
FFFFFFFF7A01FE20 00000000 00000000 00000000 00000000 [................]
Repeat 508 times
現在資料檔案中只建立一個表,還沒有插入資料,所以 BLOCK 12 的TYPE=0X00=unknow .
所以我們還不能確認這些內容到底代表什麼。
現在插入資料:
LSLIANG at sunha5 > insert into test (id ,name ) select object_id , owner from dba_objects ;
55056 rows created.
LSLIANG at sunha5 > commit;
Commit complete.
LSLIANG at sunha5 > alter system checkpoint;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 9 ;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 10 ;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 11 ;
System altered.
LSLIANG at sunha5 > alter system dump datafile 46 block 12 ;
System altered.
再來看看這幾個塊有什麼變化:
Trace file ;
Start dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9
buffer tsn: 22 rdba: 0x0b800009 (46/9)
scn: 0x0001.000f2d01 seq: 0x02 flg: 0x04 tail: 0x2d012002 /* standard block head */
frmt: 0x02 chkval: 0x0645 type: 0x20=FIRST LEVEL BITMAP BLOCK /* 塊型別: 一級點陣圖塊*/
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000106768C00 to 0x000000010676AC00
106768C00 20A20000 0B800009 000F2D01 00010204 [ .........-.....] /* standard block head */
106768C10 06450000 00000000 00000000 00000000 [.E..............]
106768C20 00000000 00000000 00000000 00000000 [................]
Repeat 1 times
106768C40 00000000 00000000 00000000 04000000 [................] /*nbits =4*/
106768C50 FFFFFFFF 00000000 00000003 00000010 [................] /00000000:unformatted: 0=0x0 *03 first useful block 10 total 16=0x10
106768C60 02000001 00000000 00000000 00000000 [................] /*02 代表nranges: 2 ; 01 owning instance : 1
106768C70 00000000 00000010 484A37F4 484A37F4 [........HJ7.HJ7.] / 00000010 First free datablock : 16=ox10 ; 484A37F4 484A37F4 時間標記 */
106768C80 00000000 00000000 00000000 00000000 [................]/* 分別代表 Bitmap block lock opcode 0 Locker xid: : 0x0000.000.00000000 Inc #: 0 */
106768C90 0B80000A 00000000 00000000 00000000 [................] /*0B80000A parent dba: 0x0b80000a level 2 block */
106768CA0 00000000 00000000 00000000 00000000 [................]
Repeat 1 times
106768CC0 000102FF 00000000 00000000 0B800009 [................]/*000102FF Inc #: 0 Objd: 66303 =dba_object表的object_id*/
106768CD0 00000008 00000000 0B800011 00000008 [................]/ 這部分是代表這個extent的範圍:起點=rdba blk數量,偏移量 */
106768CE0 00000008 00000000 00000000 00000000 [................]
106768CF0 00000000 00000000 00000000 00000000 [................]
Repeat 8 times
106768D80 00000000 00000000 00000000 11111111 [................] /* 16個1表示 full 5: 75-100%free , 4:50-75%free 3: 25-50%fred, 2:0-25%fredd 1:full ,* /
106768D90 11111111 00000000 00000000 00000000 [................]
106768DA0 00000000 00000000 00000000 00000000 [................]
Repeat 484 times
10676ABF0 00000000 00000000 00000000 2D012002 [............-. .]/*tail 每個塊都有的一個版本驗證結構如果我們在做dml的時候報錯了,說是某個塊損壞,基本就是這裡驗
Dump of First Level Bitmap Block 證出問題了,他的組成是是有block head 裡的scn: 0x0001.000f2d01的後兩位0x2d01 和塊型別type=0x20
-------------------------------- 還有seq: 0x02 組成的。*/
nbits : 4 nranges: 2 parent dba: 0x0b80000a poffset: 0
unformatted: 0 total: 16 first useful block: 3
owning instance : 1
instance ownership changed at 06/07/2008 15:25:40
Last successful Search 06/07/2008 15:25:40
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 0
106768C60 02000001 00000000 00000000 00000000 [................] /*紫色部分 分別代表nf1 0 nf2 0 nf3 0 nf4 0 使用率的統計*/
106768C70 00000000 00000010 484A37F4 484A37F4 [........HJ7.HJ7.]
106768C60 01000001 00000000 00000001 00000000 [................] /*下面這兩行是我從一個沒有添滿的extent中擷取的資料分別代表
106768C70 0000001A 00000001 484DDFC1 484DDFC1 Freeness Status: nf1 0 nf2 1=0X01 nf3 0 nf4 26=0x1A*/
Extent Map Block Offset: 4294967295 == 2^32 (2的32次冪)這個資料檔案或這個段的一個最大值。
First free datablock : 16
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 66303
--------------------------------------------------------
DBA Ranges : /* 這部分應該是我們最需要的,透過這個地方,我們可以知道我們想要的表的資料實際的存放空間。
-------------------------------------------------------- 這裡記錄了這個區(extent) 所管理的資料塊的範圍,一個extent內的資料塊一定是連續的,
0x0b800009 Length: 8 Offset: 0 這個是有由oracl 核心來保證的。所以我們只要解析出來object_id ,和這個範圍就可以進入資料塊直接讀出資料
0x0b800011 Length: 8 Offset: 8 而不用每個資料塊都來掃描一邊了。*/
0:Metadata 1:Metadata 2:Metadata 3:FULL /* 16個1表示 full * /
4:FULL 5:FULL 6:FULL 7:FULL /* 16個1表示 full 5: 75-100%free , 4:50-75%free 3: 25-50%fred, 2:0-25%fredd 1:full ,* /
8:FULL 9:FULL 10:FULL 11:FULL
12:FULL 13:FULL 14:FULL 15:FULL
--------------------------------------------------------
End dump data blocks tsn: 22 file#: 46 minblk 9 maxblk 9
*** 2008-06-07 15:26:32.771
Start dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10
buffer tsn: 22 rdba: 0x0b80000a (46/10)
scn: 0x0001.000f2d59 seq: 0x01 flg: 0x04 tail: 0x2d592101 /* standard block head */
frmt: 0x02 chkval: 0x0354 type: 0x21=SECOND LEVEL BITMAP BLOCK /*塊型別:二級點陣圖塊*/
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000106768C00 to 0x000000010676AC00
106768C00 21A20000 0B80000A 000F2D59 00010104 [!.........-Y....] /*standard block head 20bytes*/
106768C10 03540000 00000000 00000000 00000000 [.T..............]
106768C20 00000000 00000000 00000000 00000000 [................]
Repeat 1 times
106768C40 00000000 00000000 00000000 0B80000B [................]/*pdba: 0x0b80000b segment head */
106768C50 0000000A 00000002 00000008 00000000 [................]/*0000000A 一級點陣圖陣列的大小,00000002 nfree: 2 第一個可用的block,00000008 ffree: 8第一個具有空閒空間的extent */
106768C60 00000000 00000000 000102FF 00000001 [................] /*object id 表示這個二級點陣圖塊是位於這個段內的*/
106768C70 00000000 0B800009 01000001 0B800019 [................]
106768C80 01000001 0B800029 01000001 0B800039 [.......).......9]
106768C90 01000001 0B800049 01000001 0B800059 [.......I.......Y]
106768CA0 01000001 0B800069 01000001 0B800079 [.......i.......y]
106768CB0 01000001 0B800089 05000001 0B80008A [................]
106768CC0 05000001 00000000 00000000 00000000 [................]
106768CD0 00000000 00000000 00000000 00000000 [................]
Repeat 497 times
10676ABF0 00000000 00000000 00000000 2D592101 [............-Y!.]
Dump of Second Level Bitmap Block
number: 10 nfree: 2 ffree: 8 pdba: 0x0b80000b
Inc #: 0 Objd: 66303
opcode:0
xid: 0x0000.000.00000000
L1 Ranges : /這裡需要解釋下:level 2 bmb block 的作用, 上面說了 block 9 只管理了 9-25 共16個資料塊,
-------------------------------------------------------- 那麼第17塊以後的那些塊怎麼半呢,這就是level 2bmb block 的作用了,2級點陣圖塊 記錄了一級點陣圖塊的地址rdba 0x0b800009 Free: 1 Inst: 1 其實我們可以看看,或者猜測下,0x0b800009 是第9塊,9+16=25 = 0x19 既0x0b800019
0x0b800019 Free: 1 Inst: 1 25 + 16 = 41=0x0b800029 第3個一級點陣圖塊。等等依次推下去,但是並不是所有的extent都只管理16個資料塊,
0x0b800029 Free: 1 Inst: 1 當資料量增長到一定成都的時候,每個點陣圖塊管理的資料塊也會增長,並且是以幾何倍數增長的。
0x0b800039 Free: 1 Inst: 1 我們知道了第一個一級點陣圖塊和二級點陣圖塊,我門就可以知道所有的一級點陣圖塊的地址了,也就知道了這個段(對我們
0x0b800049 Free: 1 Inst: 1 來說主要是表) 的所有的儲存實際資料的資料塊的地址了,讀出裡面的資料還會有很遠了麼??!!!*/
0x0b800059 Free: 1 Inst: 1
0x0b800069 Free: 1 Inst: 1
0x0b800079 Free: 1 Inst: 1
0x0b800089 Free: 5 Inst: 1
0x0b80008a Free: 5 Inst: 1
--------------------------------------------------------
End dump data blocks tsn: 22 file#: 46 minblk 10 maxblk 10
*** 2008-06-07 15:26:44.223
Start dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11
buffer tsn: 22 rdba: 0x0b80000b (46/11)
scn: 0x0001.000f2d59 seq: 0x02 flg: 0x04 tail: 0x2d592302 /* standard block head */
frmt: 0x02 chkval: 0x2e8b type: 0x23=PAGETABLE SEGMENT HEADER /* 塊型別 : segment head */
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000106768C00 to 0x000000010676AC00
106768C00 23A20000 0B80000B 000F2D59 00010204 [#.........-Y....]
106768C10 2E8B0000 00000000 00000000 00000000 [................]
106768C20 00000000 00000011 00000100 0A9C0000 [........] /*#extents: 17=0x11 #blocks: 256=0x100 0A9Coffset: 2716=0X0A9C + 20 extent map的起始地址 Auxillary Map*/
106768C30 00000010 00000080 00000080 0B800109 [................]/*hight Highwater:: 0x0b800109 ext#: 16=0X10 blk#: 128=0X80 ext size: 128=0X80*/
106768C40 00000000 00000010 00000000 000000F4 [................] /* 00000000 00000010 mapblk 0x00000000 offset: 16=0x10 F4 #blocks below: 244=0xF4 */
106768C50 00000000 00000000 00000000 0000000F [................] /* low Highwater:: 0x0b800089 ext#: 15 blk#: 8 ext size: 8 */
106768C60 00000008 00000008 0B800089 00000000 [................] /* 00000000 0000000F mapblk 0x00000000 offset: 15=0x0f */
106768C70 0000000F 00000000 00000076 0B800079 [...........v...y]/* 76 #blocks below: 118=0x76在 low 高水平線下下面的資料塊的數量 0B800079 low 高水平標誌的塊*/
106768C80 0B80008A 00000000 00000000 00000000 [................]/*0B80008A hight 高水平標誌的資料塊*/
106768C90 00000000 00000000 00000000 00000000 [................]
Repeat 3 times
106768CD0 00010000 00002000 00000000 00001434 [...... ........4]/* 00001434 二級點陣圖extent 陣列的起始地址 0x1434 + sizeof(blk_head)=20 = 起始地址*/
106768CE0 00000000 0B80000A 00000001 0B80008A [..........]
106768CF0 0B80000A 00000000 00000000 00000000 [................]
106768D00 00000000 00000000 00000011 00000000 [................]
106768D10 000102FF 10000000 0B800009 00000008 [................] /*000102FF object_id */
106768D20 0B800011 00000008 0B800019 00000008 [................]
106768D30 0B800021 00000008 0B800029 00000008 [...!.......)....]/*這部分就是extent map 拉 每個extent管理多少個 block 就在裡面寫了*/
106768D40 0B800031 00000008 0B800039 00000008 [...1.......9....]
106768D50 0B800041 00000008 0B800049 00000008 [...A.......I....]
106768D60 0B800051 00000008 0B800059 00000008 [...Q.......Y....]
106768D70 0B800061 00000008 0B800069 00000008 [...a.......i....]
106768D80 0B800071 00000008 0B800079 00000008 [...q.......y....]
106768D90 0B800081 00000008 0B800089 00000080 [................]
106768DA0 00000000 00000000 00000000 00000000 [................]
Repeat 144 times
1067696B0 0B800009 0B80000C 0B800009 0B800011 [................] /* Auxillary Map 每個結構是 8個位元組 ,分別放置了level 1 bmb block
1067696C0 0B800019 0B80001A 0B800019 0B800021 [...............!] 和實際存放資料的資料塊(type=0x06 trans data) 的資料塊的開始地址)而每個level 1 塊裡都有記錄
1067696D0 0B800029 0B80002A 0B800029 0B800031 [...)...*...)...1] 他所管理的資料塊的數量和偏移量,知道了這個就知道資料放在那裡了*/
1067696E0 0B800039 0B80003A 0B800039 0B800041 [...9...:...9...A]
1067696F0 0B800049 0B80004A 0B800049 0B800051 [...I...J...I...Q]
106769700 0B800059 0B80005A 0B800059 0B800061 [...Y...Z...Y...a]
106769710 0B800069 0B80006A 0B800069 0B800071 [...i...j...i...q]
106769720 0B800079 0B80007A 0B800079 0B800081 [...y...z...y....]
106769730 0B800089 0B80008B 00000000 00000000 [................]
106769740 00000000 00000000 00000000 00000000 [................]
Repeat 143 times
10676A040 00000000 00000000 0B80000A 00000000 [................]
10676A050 00000000 00000000 00000000 00000000 [................]
Repeat 185 times
10676ABF0 00000000 00000000 00000000 2D592302 [............-Y#.]
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 17 #blocks: 256
last map 0x00000000 #maps: 0 offset: 2716
Highwater:: 0x0b800109 ext#: 16 blk#: 128 ext size: 128 /* 我們之前分派的 extent都是8個block 這個extent是128個
#blocks in seg. hdr's freelists: 0 這個可以用select * from dba_extents where owner='lsliang'and segmetn_name='test' l來察看下*/
#blocks below: 244 /*hight 高水平線下有244個資料塊(block )*/
mapblk 0x00000000 offset: 16
Unlocked
--------------------------------------------------------
Low HighWater Mark : /* low 高水平線的意思可以理解了吧, 就是extent被全部添滿的地方的那個標記,*/
Highwater:: 0x0b800089 ext#: 15 blk#: 8 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 118 /* 在 low 高水平線下下面的資料塊的數量 */
mapblk 0x00000000 offset: 15
Level 1 BMB for High HWM block: 0x0b80008a / 高低水平線標記的塊的地址,透過前面,我們基本可以理解高低水平線了,extent 被資料完全添滿的的那個low 高水平線
Level 1 BMB for Low HWM block: 0x0b800079 高水平線就是這個段(表) 被分配的最大的那個extent的標記了,我們所說的高水平線造成的全表掃描浪費i/o 的那部分
就是hight , low 高水平線之間的那部分資料塊了。意思就是這個意思了,我們用append 提示進行insert的時候,資料就不會寫在hight ,low 高水平線之間了,而是直接寫在hight 高水平線後面,當然了hight高水平線最終還是要在最後的了。意思就是
這個意思了。*/
-------------------------------------------------------- /*這部分說的是點陣圖塊的分佈情況。因為某些欄位沒有實際填充資料,不太容易說明白。
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0 我從線上資料中抓了一個段資料說明情況 */
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x0b80000a
Last Level 1 BMB: 0x0b80008a
Last Level II BMB: 0x0b80000a
Last Level III BMB: 0x00000000
Map Header:: next 0x00000000 #extents: 17 obj#: 66303 flag: 0x10000000
Inc # 0
1068E74D0 00010000 00002000 00000000 00001434 [...... ........4] /*二級點陣圖extent 陣列的起始地址 0x1434 + sizeof(blk_head)=20 = 起始地址*/
1068E74E0 00000000 0257E011 00000003 025F4010 [......] /*00000000 第一個levl3 bimp blk 0257E011 第一個具有空閒空間的levl2 bitmap bkk
00000003 levl2 bitmap 的數量 025F4010 : 最後一個level 1 exetent RDBA */
1068E74F0 0257E011 00000000 00000000 00000000 [.W..............] /* 0257E011 最後一個 level 2 bitmap blk */
1068E7500 00000000 00000000 00000133 024F8011 [...........3.O..] /00000133 =#extents: 307 =第308個extent
024F8011 = Map Header:: next 0x024f8011 下一個段 extent map blk 的 rdba
上面的307=0x133 說的是 extent[307] 的rdba 放在這個 extent map blk 裡。
這裡又牽扯了一個新的資料塊型別 0x24 0x24=PAGETABLE EXTENT MAP BLOCK* /
1068E7510 0000CB77 10000000 02400009 00000008 [...w.....@......]
1068E7520 02400011 00000008 02400019 00000008 [.@.......@......]
--------------------------------------------------------
Segment Type: 1 nl2: 3 blksz: 8192 fbsz: 0
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x0257e011
Last Level 1 BMB: 0x025f4010
Last Level II BMB: 0x0257e011
Last Level III BMB: 0x00000000
Map Header:: next 0x024f8011 #extents: 307 obj#: 52087 flag: 0x10000000
Inc # 0
Extent Map
----------------------------------------------------------------- /* 這會看這個exnten map有點象地圖了吧,前面說的時候只有一個地址不太象,
0x0b800009 length: 8 現在象了吧,每個 extent的大小都標記了*/
0x0b800011 length: 8
0x0b800019 length: 8
0x0b800021 length: 8
0x0b800029 length: 8
0x0b800031 length: 8
0x0b800039 length: 8
0x0b800041 length: 8
0x0b800049 length: 8
0x0b800051 length: 8
0x0b800059 length: 8
0x0b800061 length: 8
0x0b800069 length: 8
0x0b800071 length: 8
0x0b800079 length: 8
0x0b800081 length: 8
0x0b800089 length: 128
Auxillary Map
-------------------------------------------------------- /* 這裡就記錄了每個一級點陣圖塊的地址他所管轄的實際記錄資料的資料塊開始的地址。*/
Extent 0 : L1 dba: 0x0b800009 Data dba: 0x0b80000c
Extent 1 : L1 dba: 0x0b800009 Data dba: 0x0b800011
Extent 2 : L1 dba: 0x0b800019 Data dba: 0x0b80001a
Extent 3 : L1 dba: 0x0b800019 Data dba: 0x0b800021
Extent 4 : L1 dba: 0x0b800029 Data dba: 0x0b80002a
Extent 5 : L1 dba: 0x0b800029 Data dba: 0x0b800031
Extent 6 : L1 dba: 0x0b800039 Data dba: 0x0b80003a
Extent 7 : L1 dba: 0x0b800039 Data dba: 0x0b800041
Extent 8 : L1 dba: 0x0b800049 Data dba: 0x0b80004a
Extent 9 : L1 dba: 0x0b800049 Data dba: 0x0b800051
Extent 10 : L1 dba: 0x0b800059 Data dba: 0x0b80005a
Extent 11 : L1 dba: 0x0b800059 Data dba: 0x0b800061
Extent 12 : L1 dba: 0x0b800069 Data dba: 0x0b80006a
Extent 13 : L1 dba: 0x0b800069 Data dba: 0x0b800071
Extent 14 : L1 dba: 0x0b800079 Data dba: 0x0b80007a
Extent 15 : L1 dba: 0x0b800079 Data dba: 0x0b800081
Extent 16 : L1 dba: 0x0b800089 Data dba: 0x0b80008b
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x0b80000a
End dump data blocks tsn: 22 file#: 46 minblk 11 maxblk 11
/* 好了,到這裡關於extent 的內部結構的一個初步分析就到這裡了,這個分析是基於本地管理的表空間的一個分析,對於字典管理的表空間的空間分配情況,因為這種方式已經過時了,我們就沒有 必要去做了,透過這個分析,我們基本知道了oracle 資料塊擴充套件的一般規則, 其中一些引數取決於建立表空間檔案,和建表語句的儲存部分的選項,9i / 10g 預設情況下 一個extent的初次分配是64k 既8個block ,在前16個extent基本是8個塊,超過16個extent 就不一定了,基本是按64k,1m ,8m,256m 這樣增長的。
每個level 1 bmb block 管理實際的資料塊,level 2 bmb block 記錄了 level 1 bmb block 的地址,當表空間或資料檔案裡有多個段(表)的時候,一個表的資料就不總是連續的了,這時候level 2 bmb block 就發揮作用了,但是oracle 核心保證一個extent內部的資料塊是連續的,所以就引入了另外一個問題,oracle的一次物理i/o,是不能跨越extent的,當一個extent是8個塊的時候,我們就是把引數db_BLOCK_READ_COUNT設為16也沒有用,一次只能讀8個塊。
還有我們也看到了高水平線的問題了,我們平常說的高水平線,其實是hight HWM 還有一個low HWM 標記的是被完全寫滿的哪個extent,我們平常說的因為高水平線導致的全表掃描浪費i/0的那部分資料塊基本是在low hwm 和 hight hwm 之間的這部分資料塊。 如果一個新表,第一次插入資料的時候,如果高水平線所在的extent 沒有被完全添滿的話,hight , low 之間還是有一段空間的。 10g 如果開啟了表的 row moveable 的話,是可以處理掉一部分的,但是就修改資料的rowid 如果表的列中涉及到rowid 就會有問題了。* /
搞明白了這個部分對我們分析資料檔案就奠定了一個基本的入口了,至少我們知道了,一個表的資料可以透過怎麼樣一個方法去找了,避免了全檔案掃描了,
關於 blk_type 0x24=PAGETABLE EXTENT MAP BLOCK 的說明
我們已經在段頭塊(segment head block BLK_TYPE=0X23) 中已經看到了extent map 陣列的結構了,
一部分是expent map arrary 記錄的是 一級點陣圖塊的 rdba 和這個點陣圖所管理的datablock 的數量,
一部分是 Auxillary Map arrary 記錄的 這個一級點陣圖塊 所管理的datablock 開始的位置。
例如:
Extent Map Auxillary Map
----------------------------------------------------------------- --------------------------------------------------------
0x02400009 length: 8 Extent 0 : L1 dba: 0x02400009 Data dba: 0x0240000c
0x02400011 length: 8 Extent 1 : L1 dba: 0x02400009 Data dba: 0x02400011
0x02400019 length: 8 Extent 2 : L1 dba: 0x02400019 Data dba: 0x0240001a
0x024f4009 length: 8192 Extent 3 : L1 dba: 0x02400019 Data dba: 0x02400021
0x024f6009 length: 8192 Extent 4 : L1 dba: 0x02400029 Data dba: 0x0240002a
下面的部分是一個 page table extent map block 的例子
Start dump data blocks tsn: 10 file#: 9 minblk 1015825 maxblk 1015825
buffer tsn: 10 rdba: 0x024f8011 (9/1015825)
scn: 0x0000.00271cdb seq: 0x01 flg: 0x04 tail: 0x1cdb2401
frmt: 0x02 chkval: 0x13bc type: 0x24=PAGETABLE EXTENT MAP BLOCK /* /* 段 extent map block */
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x00000001068E7400 to 0x00000001068E9400
1068E7400 24A20000 024F8011 00271CDB 00000104 [$....O...'......] /* 標準的block head */
1068E7410 13BC0000 00000088 00000000 0000CB77 [...............w] /* 00000088陣列的長度,本blk 中記錄了多少個extent ,
00000000 下一個extent map blk 的地址rdba ,這裡是0 ,因為沒有下一個了。
0000CB77 object_id = obj#: 52087 */
1068E7420 10000000 024F8009 00002000 024FA009 [.....O.... ..O..] 10000000 = flag: 0x10000000*/
1068E7430 00002000 024FC009 00002000 024FE009 [.. ..O.... ..O..] 經過觀察一個pagetable extent map block 最多隻能裝下508個extent 資料,
1068E7440 00002000 02500009 00002000 02502009 [.. ..P.... ..P .] Auxillary Map 的開始地址是 offset = 4100 =
1068E7450 00002000 02504009 00002000 02506009 [.. ..P@... ..P`.] sizeof(blk_Head)=20 + sizeof(ext dict) 16 + sizof (texten item ) 8 * 508 */
1068E7460 00002000 02508009 00002000 0250A009 [.. ..P.... ..P..] 024F8009 00002000 024FA009 extent map arrary 的開始地址 offset =36 = ;
1068E7470 00002000 0250C009 00002000 0250E009 [.. ..P.... ..P..] sizeof(blk_head) =20 + sizeof(exy dict) 16 = 36
1068E7480 00002000 02510009 00002000 02512009 [.. ..Q.... ..Q .]
1068E7490 00002000 02514009 00002000 02516009 [.. ..Q@... ..Q`.]
1068E74A0 00002000 02518009 00002000 0251A009 [.. ..Q.... ..Q..]
1068E74B0 00002000 0251C009 00002000 0251E009 [.. ..Q.... ..Q..]
**********************************************
****************
1068E7840 00002000 02600009 00002000 02602009 [.. ..`.... ..` .]
1068E7850 00002000 02604009 00002000 02606009 [.. ..`@... ..``.]
1068E7860 00002000 00000000 00000000 00000000 [.. .............]
1068E7870 00000000 00000000 00000000 00000000 [................]
Repeat 184 times
1068E8400 00000000 024F8009 024F8012 024FA009 [.....O...O...O..]
1068E8410 024FA011 024FC009 024FC011 024FE009 [.O...O...O...O..]
1068E8420 024FE011 02500009 02500011 02502009 [.O...P...P...P .]
1068E8430 02502011 02504009 02504011 02506009 [.P ..P@..P@..P`.]
1068E8440 02506011 02508009 02508011 0250A009 [.P`..P...P...P..]
1068E8450 0250A011 0250C009 0250C011 0250E009 [.P...P...P...P..]
1068E8460 0250E011 02510009 02510011 02512009 [.P...Q...Q...Q .]
1068E8470 02512011 02514009 02514011 02516009 [.Q ..Q@..Q@..Q`.]
1068E8480 02516011 02518009 02518011 0251A009 [.Q`..Q...Q...Q..]
1068E8490 0251A011 0251C009 0251C011 0251E009 [.Q...Q...Q...Q..]
*******************************
***************************
1068E93C0 70457863 65707469 6F6E3A20 C9E8B6A8 [pException: ....]
1068E93D0 B9ABCBBE B2FAC6B7 B1A8BCDB CEDED0A7 [................]
1068E93E0 CAB1B3F6 B4ED0778 6B090712 150FFFFF [.......xk.......]
1068E93F0 FF0AB2D9 D7F7CAA7 00000000 1CDB2401 [..............$.]
EMB Dump:
Map Header:: next 0x00000000 #extents: 136 obj#: 52087 flag: 0x10000000
Inc # 0
Extent Map
-----------------------------------------------------------------
0x024f8009 length: 8192
0x024fa009 length: 8192
0x024fc009 length: 8192
0x024fe009 length: 8192
******************
0x02600009 length: 8192
0x02602009 length: 8192
0x02604009 length: 8192
0x02606009 length: 8192
Auxillary Map
--------------------------------------------------------
Extent 0 : L1 dba: 0x024f8009 Data dba: 0x024f8012
Extent 1 : L1 dba: 0x024fa009 Data dba: 0x024fa011
Extent 2 : L1 dba: 0x024fc009 Data dba: 0x024fc011
Extent 3 : L1 dba: 0x024fe009 Data dba: 0x024fe011
Extent 4 : L1 dba: 0x02500009 Data dba: 0x02500011
Extent 5 : L1 dba: 0x02502009 Data dba: 0x02502011
Extent 6 : L1 dba: 0x02504009 Data dba: 0x02504011
Extent 7 : L1 dba: 0x02506009 Data dba: 0x02506011
***************************************
Extent 133 : L1 dba: 0x02602009 Data dba: 0x02602011
Extent 134 : L1 dba: 0x02604009 Data dba: 0x02604011
Extent 135 : L1 dba: 0x02606009 Data dba: 0x02606011
--------------------------------------------------------
End dump data blocks tsn: 10 file#: 9 minblk 1015825 maxblk 1015825
*** 2008-06-07 15:26:55.524
Start dump data blocks tsn: 22 file#: 46 minblk 12 maxblk 12 / * 現在12塊已經有資料了,看看他被分了個什麼官做 ??
buffer tsn: 22 rdba: 0x0b80000c (46/12)
scn: 0x0001.000f2e59 seq: 0x01 flg: 0x06 tail: 0x2e590601
frmt: 0x02 chkval: 0x2e3f type: 0x06=trans data /* 塊型別: 資料塊 */
Hex dump of block: st=0, typ_found=1
Dump of memory from 0x0000000106768C00 to 0x000000010676AC00 /關於 0x06=trans data 型別的資料快的結構和分析我們以後再給出 */
106768C00 06A20000 0B80000C 000F2E59 00010106 [...........Y....]
106768C10 2E3F0000 01000000 000102FF 000EE87B [.?.............{]
106768C20 0001FFFF 00023200 0B800009 000E0005 [......2.........]
106768C30 0000298E 00800CB2 04102400 21F50000 [..).......$.!...]
************************************
*************************************
106768DF0 1F8D09E0 09EE09F9 0A070A12 0A200A2B [............. .+]
106768E00 0A390A44 0A520A5D 0A6B0A76 0A840A8F [.9.D.R.].k.v....]
106768E10 0A9D0AA8 0AB60AC1 0ACF0ADA 0AE80AF3 [................]
106768E20 0B010B0C 0B1A0B25 0B330B3E 0B4C0B57 [.......%.3.>.L.W]
106768E30 0B650B70 0B7E0B89 0B970BA2 0BB00BBB [.e.p.~..........]
106768E40 0BC90BD4 0BE20BED 0BFB0C06 0C140C1F [................]
106768E50 0C2D0C38 0C460C51 0C5F0C6A 0C780C83 [.-.8.F.Q._.j.x..]
106768E60 0C910C9C 0CAA0CB5 0CC30CCE 0CDC0CE7 [................]
****************************
********************************
10676ABC0 010203C2 131C0353 59532C01 0203C213 [.......SYS,.....]
10676ABD0 1D065055 424C4943 2C010203 C2131E03 [..PUBLIC,.......]
10676ABE0 5359532C 010203C2 131F0650 55424C49 [SYS,.......PUBLI]
10676ABF0 432C0102 03C21320 03535953 2E590601 [C,..... .SYS.Y..]
Block header dump: 0x0b80000c
Object id on Block? Y
seg/obj: 0x102ff csc: 0x01.ee87b itc: 2 flg: E typ: 1 - DATA
brn: 0 bdba: 0xb800009 ver: 0x01 opc: 0
inc: 0 exflg: 0
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0x000e.005.0000298e 0x00800cb2.0410.24 --U- 501 fsc 0x0000.000f2e59
0x02 0x0000.000.00000000 0x00000000.0000.00 ---- 0 fsc 0x0000.00000000
data_block_dump,data header at 0x106768c64
===============
tsiz: 0x1f98
hsiz: 0x3fc
pbl: 0x106768c64
bdba: 0x0b80000c
76543210
flag=--------
ntab=1
nrow=501
frre=-1
fsbo=0x3fc
fseo=0x725
avsp=0x329
tosp=0x329
0xe:pti[0] nrow=501 offs=0
0x12:pri[0] offs=0x1653
0x14:pri[1] offs=0x1661
0x16:pri[2] offs=0x166c
0x18:pri[3] offs=0x167a
0x1a:pri[4] offs=0x1685
0x1c:pri[5] offs=0x1693
0x1e:pri[6] offs=0x169e
****************
****************
0x3f4:pri[497] offs=0x9ae
0x3f6:pri[498] offs=0x9bc
0x3f8:pri[499] offs=0x9c7
0x3fa:pri[500] offs=0x9d5
block_row_dump:
tab 0, row 0, @0x1653
tl: 14 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 11 2b
col 1: [ 6] 50 55 42 4c 49 43
tab 0, row 1, @0x1661
tl: 11 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 11 2c
col 1: [ 3] 53 59 53
tab 0, row 2, @0x166c
tl: 14 fb: --H-FL-- lb: 0x1 cc: 2
col 0: [ 3] c2 11 2d
col 1: [ 6] 50 55 42 4c 49 43
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-1788225/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- SQLite3資料庫檔案結構解析SQLite資料庫
- 13_深入解析Oracle資料庫bootstrapOracle資料庫boot
- 幽默:沒有資料庫的架構來了資料庫架構
- MyRocks儲存引擎資料結構解析儲存引擎資料結構
- pyspark 解析kafka陣列結構資料SparkKafka陣列
- ORACLE 資料塊格式深入解析Oracle
- Agile PLM資料庫表結構(Oracle)資料庫Oracle
- FreeMarker對應各種資料結構解析資料結構
- PostgreSQL Page頁結構解析(3)- 行資料SQL
- HashMap底層資料結構原始碼解析HashMap資料結構原始碼
- Redis資料結構:List型別全面解析Redis資料結構型別
- 從 Oracle 日誌解析學習資料庫核心原理Oracle資料庫
- Oracle資料庫遷移到國產資料庫核心難點解析 | 聯盟釋出Oracle資料庫
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- mysql資料庫-資料結構MySql資料庫資料結構
- [演算法] 資料結構 splay(伸展樹)解析演算法資料結構
- Oracle資料庫之cursor、refcursor及sys_refcursor深度解析Oracle資料庫
- 資料解析
- 誤刪了公司資料庫,但我還是活下來了資料庫
- database資料庫的資料結構Database資料庫資料結構
- 管你MySQL還是Oracle,資料庫管理就完事了MySqlOracle資料庫
- 你選對儲存結構了嗎?你會玩UVM配置資料庫了嗎?資料庫
- 初涉MySQL資料庫部署解析MySql資料庫
- 資料庫開發工具界的ChatGPT來了資料庫ChatGPT
- Godot 解析資料Go
- datatable資料解析
- Oracle 19c資料庫體系結構-2Oracle資料庫
- Oracle 19c資料庫體系結構-1Oracle資料庫
- Android技術棧(五)核心資料結構原始碼解析Android資料結構原始碼
- VSAN儲存結構解析+儲存資料恢復案例資料恢復
- [BUG反饋]後臺備份資料庫後,只備份了結構,資料全部空的。資料庫
- 資料庫連線池-Druid資料庫連線池原始碼解析資料庫UI原始碼
- 配置ORACLE資料庫到達夢資料庫的異構DBLINKOracle資料庫
- 資料庫索引背後的資料結構資料庫索引資料結構
- 讓資料流動起來,RocketMQ Connect 技術架構解析MQ架構
- 演算法與資料結構解析-- 系列文章彙總篇演算法資料結構
- Redis的ZSet底層資料結構,ZSet型別全面解析Redis資料結構型別
- 大資料開發過程中Kafka日誌結構解析大資料Kafka
- 我曾誤刪了公司的資料庫,但還是活下來了資料庫