Index internal 結構 試驗一
Index internal 結構 試驗一
本文通過dump index 的root 塊,branch 塊和leaf 塊,及相對應的table中的內容,來初步揭示index 的一些內部結構資訊,dump出來的檔案作了概要的說明,供學習參考使用。
實驗環境:windows xp,oracle 9i
SQL> drop table t;
SQL> create table t as select rownum t,a.* from dba_objects a;
SQL> create index t_idx on t(t);
SQL> select extent_id,file_id,block_id,blocks from dba_extents where segment_name='T_IDX' AND WNER='SYS';
EXTENT_ID FILE_ID BLOCK_ID BLOCKS
---------- ---------- ---------- ----------
0 1 52153 8
1 1 52161 8
2 1 52177 8
3 1 52185 8
4 1 52193 8
5 1 52201 8
6 1 52209 8
7 1 52217 8
8 1 52225 8
SQL> ANALYZE INDEX T_IDX VALIDATE STRUCTURE;
SQL> SELECT height,blocks,lf_blks,br_blks,btree_space,used_space FROM INDEX_STATS WHERE NAME='T_IDX';
HEIGHT BLOCKS LF_BLKS BR_BLKS BTREE_SPACE USED_SPACE
---------- ---------- ---------- ---------- ----------- ----------
2 72 65 1 528032 465248
可以看到,該所引高度為2,只有1個branch塊,同時也是root根節點,同時有65個leaf塊。
Block 52153 表示 索引段頭塊,對於此處分析無大用途,再次省略
Block 52154 表示該索引的root 所在的塊,dump該塊,可以看到,branch 塊中存在中指向下級葉塊(有可能是葉塊,也可能是分支塊)的地址指標及葉塊中的最小值,dump該塊。
alter system dump datafile 1 block 52154;
…………………………………………….
seg/obj: 0x7800 csc: 0x00.5a071b itc: 1 flg: - typ: 2 - INDEX
fsl: 0 fnx: 0x0 ver: 0x01
Itl Xid Uba Flag Lck Scn/Fsc
0x01 0xffff.000.00000000 0x00000000.0000.00 C--- 0 scn 0x0000.005a071b
Branch block dump --表示該塊ranch block
=================
header address 79040580=0x4b61044
kdxcolev 1
KDXCOLEV Flags = - - -
kdxcolok 0
kdxcoopc 0x80: pcode=0: iot flags=--- is converted=Y
kdxconco 2
kdxcosdc 0
kdxconro 64 –該塊含有64個rows,即root根節點有64個指向葉塊的指標
kdxcofbo 156=0x9c
kdxcofeo 7440=0x1d10
kdxcoavs 7284
kdxbrlmc 4246459=0x40cbbb --第一個葉塊地址前2位補0,即0000 0000 0100 0000 1100 1011 1011 1011, file 1 block 52155,為第一個index leaf 的塊地址
kdxbrsno 0
kdxbrbksz 8060
row#0[8051] dba: 4246460=0x40cbbc –第二個索引葉塊地址
col 0; len 3; (3): c2 05 57 -- c2 05 57 表示 486,即第二個葉塊中的記錄從t=486 開始
col 1; TERM
row#1[8042] dba: 4246461=0x40cbbd
col 0; len 3; (3): c2 0a 42
col 1; TERM
…………………………………………. 省略瞭如果類似記錄
………………………………………….
row#63[7440] dba: 4246531=0x40cc03 –root 塊共有64條 記錄,每條記錄都有指向下一級塊的指標
col 0; len 4; (4): c3 03 5e 46
col 1; TERM
----- end of branch block dump -----
End dump data blocks tsn: 0 file#: 1 minblk 52154 maxblk 52154
轉儲 52155 塊,看看該索引葉塊的儲存內容
SQL> alter system dump datafile 1 block 52155;
…………………………………..
kdxconco 2
kdxcosdc 0
kdxconro 485 --該索引葉塊所儲存的記錄數
kdxcofbo 1006=0x3ee
kdxcofeo 1834=0x72a
kdxcoavs 828
kdxlespl 0
kdxlende 0
kdxlenxt 4246460=0x40cbbc –下一個葉塊地址
kdxleprv 0=0x0 --上一個葉塊地址,該塊為第一個塊,所以為0,可以驗證:索引用雙向連結串列來管理所有的葉塊,這樣就可以提高index range scan
kdxledsz 0
kdxlebksz 8036
row#0[8024] flag: -----, lock: 0
col 0; len 2; (2): c1 02 --c1 02 表示數值型的 1,即t=1 的第一條記錄
col 1; len 6; (6): 00 40 c9 3a 00 00 -- 0000 0000 0100 0000 1100 1001 0011 1010 file 1 block 51514 索引鍵值所在table的地址 ,00 00 表示第一條記錄
row#1[8012] flag: -----, lock: 0
col 0; len 2; (2): c1 03
col 1; len 6; (6): 00 40 c9 3a 00 01
………………………………………省略了row#2至row#483 記錄資訊
row#484[1834] flag: -----, lock: 0
col 0; len 3; (3): c2 05 56 -- c2 05 56 表示t= 485
col 1; len 6; (6): 00 40 c9 41 00 0d
----- end of leaf block dump -----
End dump data blocks tsn: 0 file#: 1 minblk 52155 maxblk 52155
SQL> alter system dump datafile 1 block 51514;
Dump 對應table 的所在塊 ,擷取dump出來的第一條記錄,驗證索引葉塊中的索引條目中的確有指向對應table 塊的地址.
…………………….
block_row_dump:
tab 0, row 0, @0x1f25
tl: 99 fb: --H-FL-- lb: 0x0 cc: 14
col 0: [ 2] c1 02 -- 01
col 1: [ 3] 53 59 53 – 表示sys
col 2: [22]
2f 31 30 30 35 62 64 33 30 5f 4c 6e 6b 64 43 6f 6e 73 74 61 6e 74
col 3: *NULL*
col 4: [ 4] c3 02 49 57
col 5: *NULL*
col 6: [10] 4a 41 56 41 20 43 4c 41 53 53
col 7: [ 7] 78 66 05 0c 11 34 1a
col 8: [ 7] 78 66 05 0c 11 34 1a
col 9: [19] 32 30 30 32 2d 30 35 2d 31 32 3a 31 36 3a 35 31 3a 32 35
col 10: [ 5] 56 41 4c 49 44
col 11: [ 1] 4e
col 12: [ 1] 4e
col 13: [ 1] 4e
……………………………………………以下dump內容省略
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10159839/viewspace-217985/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle index索引結構(一)OracleIndex索引
- Btree Index storage internalIndex
- dump index 的層次結構Index
- 自己做oracle試驗的總結之一Oracle
- Index Joins的一點測試!Index
- index skip scan的一些實驗。Index
- 一定要掌握的CCNA試驗考試命令總結(轉)
- index clusterring cluster的一點測試!Index
- 實驗 結構體結構體
- 考試經驗總結
- Oracle index 使用的一個總結OracleIndex
- RMAN備份效率之-oracle block internal(block 內部結構分解)OracleBloC
- 一位測試大神的軟體測試工作經驗總結
- mongodb replicat internal(一)MongoDB
- 不確定的資料結構試驗clob欄位儲存資料結構
- OneProxy5.8.1新的目錄組織結構執行試驗
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- 測試經驗總結:測試員的角色
- 檢驗一顆樹是不是另一顆樹的子結構
- 資料結構實驗(4)資料結構
- 資料結構實驗1資料結構
- 有關ADDM試驗總結:
- 兩年測試經驗總結
- Index Condition Pushdown測試Index
- 基於函式index的一點簡單測試!函式Index
- 實驗一 總結
- 關於MYSQL INNODB index page header學習和實驗總結MySqlIndexHeader
- 資料結構連結串列筆試題資料結構筆試
- 信管117128許盛迪資料結構實驗一資料結構
- JMeter測試WebSocket的經驗總結JMeterWeb
- [總結]關於index range scans & INDEX (FAST FULL SCAN)IndexAST
- 資料結構實驗六是否同一顆二叉樹資料結構二叉樹
- 資料結構實驗:連結串列的應用資料結構
- 複合資料型別--此處偶做了index_by表的試驗#zhuan#資料型別Index
- Mask RCNN測試過程經驗總結CNN
- INNODB 熱備工具試驗與總結 薦
- 資料結構實驗課五-1資料結構
- OC物件是結構體的驗證物件結構體