天天看點

Oracle ASSM三級位圖塊結構(未看)

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的結構應該如下圖所示:

Oracle 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%再占市場首位

繼續閱讀