oracle中extents存在的理由

2022-04-18 17:26:28 字數 1327 閱讀 2562

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能消除碎片,本地管理的表空間對連續的碎片有自動處理的能力,但對不連續的碎片無能為力。

spring中存oracle的clob型別資料

最近把乙個基於mysql的功能改為基於oracle中,出現了字元過長 ora 07104 字串文字太長 的錯誤。如果直接以平常sql語句來插入我們的文字,文字內容不能超過4000個字元 update sp type set sp html 文字內容 mysql的longtext就相當於oracle的...

oracle存過之游標

游標的最簡單結構是 declare 定義乙個游標 cursor vrows is select from area where parent area 340000 游標的單列 vrow area rowtype begin 開啟游標 open vrows 迴圈 loop 注入,相當於for迴圈 f...

Oracle 級聯刪除約束後索引物件仍然存在

oracle 資料庫裡可能因索引與約束建立的依賴關係不同,在級聯刪除約束後索引物件可能仍然存在 示例 建表 create table test tmp asselect rownum as task id from dual connect by rownum 10 先建立索引 create uni...