Oracle 採用「優先使用最大自由區塊」的空間分配策略。隨著段的反覆建立、擴展、刪除,表空間內會產生大量離散、細小的自由區塊,形成「自由空間碎片」。此外,段內部因行遷移、刪除操作導致區塊利用率低下,形成「段碎片」。
FSFI = 100 × √(最大區塊/區塊總和) × 1/⁴√(區塊數量)
column FSFI format 999.99
select tablespace_name,
sqrt(max(blocks)/sum(blocks)) * (100/sqrt(sqrt(count(blocks)))) FSFI
from dba_free_space
group by tablespace_name
order by 1;
alter tablespace <tablespace_name> default storage (pctincrease 1);
設定 pctincrease 為非零值(建議 1),SMON 會定期合併相鄰自由區塊。
alter tablespace <tablespace_name> coalesce;
立即合併相鄰自由區塊,不影響業務讀寫。
sqlplus / as sysdba <
當段擁有過多離散區塊(查詢 dba_segments/dba_extents 確認)時,採用「匯出/匯入重建」法:
exp user/pass file=seg.dmp compress=y grants=y indexes=y tables=(t1,t2)imp user/pass file=seg.dmp commit=y buffer=64000 full=y適用於整個資料庫或特定大表,需預留足夠停機窗口與暫存空間。
dba_free_space 趨勢分析,制定整理排程。碎片整理是資料庫維護的常態工作,而非一次性專案。建立監控指標、自動化腳本與變更流程,才能長期維持儲存層健康。