Oracle ASSM三級位圖塊結構 0
作者: eygle | English 【轉載時請标明 出處和作者資訊】|【 恩墨學院 OCM教育訓練傳DBA成功之道】
連結: http://www.eygle.com/archives/2007/07/oracle_assm_level3_bmb.html 站内相關文章|Related Articles Oracle KKS 層-Kernel Kompile Shared (cursors)
DBA手記:共享池的改進與ORA-04031的變化
資料字典視圖之:V$TYPE_SIZE 結構
Oracle KSL Latch 管理層 與 Latch管理
Oracle10gR2中的Mutex競争的案例
前幾天Piner釋出了一個懸賞:尋找ASSM三級位圖塊的文章,同時給出了對于ASSM結構的猜想。
Piner猜想的結構和我想像的不同,我認為ASSM的結構應該如下圖所示:
也就是說我認為BMB的結構應該是均衡的,同時段頭的PAGETABLE SEGMENT HEADER同時充當了第0個3級位圖塊的角色。
在PAGETABLE SEGMENT HEADER中實際上我們可以很容易的看到這樣的輸出:
--------------------------------------------------------
Segment Type: 1 nl2: 103 blksz: 2048 fbsz: 0
L2 Array start offset: 0x00000434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x0355cfad
Last Level 1 BMB: 0x03560c9c
Last Level II BMB: 0x0355cfad
Last Level III BMB: 0x00000000
Map Header:: next 0x034000bf #extents: 51 obj#: 33141 flag: 0x20000000
Extent Map
-----------------------------------------------------------------
也就是說,這裡記錄了First Level 3 BMB和Last Level III BMB的位址,那麼這就足夠了,這裡的雙向指針完全可以進行Level 3級位圖塊的導航,而這第0個三級位圖塊也即段頭,并無需記錄所有3級位圖塊的位址。
由于産生另外一個3級位圖塊并不容易,是以Piner才提出懸賞,他構造了一個873G的大表,仍然沒有産生另外的3級位圖塊:
SQL> select bytes/1024/1024/1024 "SIZE(G)" from user_segments where segment_name='TEST';
SIZE(G)
----------
873.25
為了尋找3級位圖塊,我着手做了以下實驗,實驗要能夠:
1.實作更快快速的區間配置設定與擴充
2.使第0個3級位圖塊也即segment header盡量小,以便進一步擴充
為此我建立了一個2k block_size的表空間,設定uniform size區間大小為10K,這樣可以盡量所見空間耗用:
SQL> create tablespace eygle
2 datafile 'd:\EYGLE01.DBF' size 1024M reuse blocksize 2048
3 extent management local uniform size 10k
4 segment space management auto;
表空間已建立。
SQL> set timing on
SQL> alter tablespace eygle add datafile 'f:\eygle02.dbf' size 8191M reuse;
表空間已更改。
已用時間: 00: 44: 42.08
注意,增加了一個8G的資料檔案,足足用了我44分鐘,這是一個Windows平台,異常緩慢。
然後建立一個資料表,設定高pctfree值,使得每個Block隻存儲一行資料,然後插入1千萬記錄:
SQL> create table EYGLE
2 (
3 ID NUMBER(8),
4 UNAME CHAR(1000)
5 )
6 tablespace eygle
7 pctfree 50
8 initrans 1
9 maxtrans 255
10 ;
表已建立。
已用時間: 00: 00: 00.00
SQL> begin
2 for i in 1 .. 100 loop
3 for i in 1 .. 100000 loop
4 insert into eygle values(i,'eygle');
5 end loop;
6 commit;
7 end loop;
8 end;
9 /
完成這些操作之後,這個表用了大約9G空間:
SQL> select bytes/1024/1024/1024 sizegb from dba_segments
2 where segment_name='EYGLE';
SIZEGB
----------
8.9988327
此時第一個3級位圖塊出現了,這是多麼珍貴的一個3級位圖塊啊:
Start dump data blocks tsn: 12 file#: 13 minblk 4032222 maxblk 4032222
buffer tsn: 12 rdba: 0x037d86de (13/4032222)
scn: 0x0000.00bdc864 seq: 0x01 flg: 0x04 tail: 0xc8642201
frmt: 0x02 chkval: 0xf597 type: 0x22= THIRD LEVEL BITMAP BLOCK
Dump of Third Level Bitmap Block
number: 9 , next : 0x00000000
L2 Ranges :
--------------------------------------------------------
0x037d86dd
0x037dd22d 0x037e1d7d 0x037e68cd 0x037eb41d
0x037eff6d 0x037f4abd 0x037f960d 0x037fe15d
--------------------------------------------------------
End dump data blocks tsn: 12 file#: 13 minblk 4032222 maxblk 4032222
這個位圖上上存在一個向下的指針:next : 0x00000000 ,當然現在還沒有數值,我們可以再産生下一個3級位圖塊來觀察。
那麼實際上到這裡已經足夠了,我的圖示已經得到了足夠的說明。
-The End-
曆史上的今天...
>> 2006-07-04文章:
首屆傑出資料庫工程師複選名單公布
在北京 感覺地震
>> 2005-07-04文章:
徐克的新作《七劍》
相關文章:
- 2013資料庫大會:崔華-基于Oracle的SQL優化案例分析
- Oracle11g資料庫的認證體系結構
- Oracle資料庫恢複:資料庫黑客攻擊案例一則
- Oracle Database 12c 新特性 - Pluggable Database
- Oracle資料庫恢複:風險意識缺乏導緻的資料風險
- Oracle中模拟及修複資料塊損壞
- Oracle資料庫以44.4%再占市場首位