對oracle資料表空間的計算

greenteazsh發表於2011-02-15
定義好資料表後,對一個資料記錄佔用表空間的估算方式:
定義資料表t_test:
CREATE TABLE t_test(
  id number(8)   not null,
  sip number(10),
  stime timestamp,
  filename varchar2(2048 char),
  dire char(1),
  primary key (id)
)
1、先說下oracle中各欄位型別的定義。number(size),為整型資料定義,其中的size最大可為38位,這個size是定義的最長長度,是佔用的位元組數。但在資料庫中的實際佔用位元組數是和具體數值有關的。查詢方式:select t.id, dump(t.id) from t_test t;,用dump函式,對欄位實際佔用的位元組數進行查詢。結果為2249  Typ=2 Len=3: 194,23,50,type=2為oracle對number型別的常量定義,len=3表示實際佔用的位元組數。所以說number型別的實際儲存空間不是定長的。同理,varchar2(size)也不是定長的,size表示可儲存的最大位元組數。char是定長的。所說,number和varchar2是可變儲存的,但定義資料表的時候要視實際情況進行決定,不要太長。
2、表中欄位涉及到索引時,所佔用空間的計算。
b-tree索引每行都有一個rowid,一個rowid對應為60位,再和位元組進行換算。對於bitmap索引,目前還沒有找到好的計算公式,以後補充。對已經執行一段時間的資料庫,可以對錶所佔空間,索引所佔空間進行查詢,計算一個比例值。具體是用到dba_extents或dba_segments,segment_name segment_type欄位。
select (sum(bytes)/1024/1024) as M from dba_segments where segment_name = 'T_TEST';
select (sum(bytes)/1024/1024) as M from dba_segments where segment_name = upper
('index_sip_t_test');

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9521459/viewspace-687289/,如需轉載,請註明出處,否則將追究法律責任。

相關文章