特性: 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,極大提高掃描的效率。
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能消除碎片,本地管理的表空間對連續的碎片有自動處理的能力,但對不連續的碎片無能為力。
|