oracle中extents存在的理由

junnyblog發表於2010-12-12
oracle中extents存在的理由[@more@]

extents的特性:
1:一個extent由相連的多個blocks組成,多個extents組成一個segment,
2:oracle在為segment分配空間時,是以extent為單位
因此extents帶來的好處:
1:空間分配、釋放效率將會提升
oracle建議一個segment的extents數量一般不要超過1024,而對於big table可能包含上千萬個block,如果沒有extent,那麼oracle就要分配上千萬個block,而有了extent,只要分配上千個extents就行。extent表示大量的blocks效率很高,extent並不列出所有的block,而是列出起始兩個block(因為extent是聯絡的,起始block就能定位一個extent),oracle分配空間的時間與extents的數目呈比例,與blocks數目沒有很大關係。同理,在釋放空間時,extent一樣可以提高操作的效率。
對字典管理的表空間,extent作用很明顯,如果沒有extent,資料字典中必須記錄各個block,如果big table佔用上千萬個block,那麼資料字典也會大量佔用,假設資料字典會佔用上百萬個block,分配或釋放這些big table時,還要對這些上百萬block的資料字典插入會刪除,豈不會額外新增很多工作,
2:全表掃描
在進行全表掃描時,利用extent包含聯絡blocks的特性,可以一次讀出多個欄位,這樣就能大大減少物理IO,極大提高掃描的效率。

every thing has two side
extent帶來的負面作用
表空間碎片:
如果沒有extent,oracle在給segment分配空間時以block為單位,而block總是一樣大的,典型的8k,16k,這時每個block都可以得到利用。有了extent,extent就是最小的分配單元,而extent的大小並不總是相等的,假設開始的的三個segment都很小,extent也不大,例如10個blocks,如果第二個的segment釋放後,在中間的那個10block就空閒出來,但是如果以後segment都要求分配至少20個block的extent時,那麼這10blocks的空閒空間就得不到利用,在極端情況下,表空間由1000個10block的空閒,但無法分配20block的extent。exp/imp能消除碎片,本地管理的表空間對連續的碎片有自動處理的能力,但對不連續的碎片無能為力。

轉載:http://hi.baidu.com/lzytest/blog/item/2e482a38d3adc424b8998fba.html

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

相關文章