首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資料庫碎片整理完整指南:產生原因、FSFI 計算與解決方案

     編輯:Oracle 資料庫基礎

碎片產生機制

當段的初始區塊寫滿後,Oracle 會申請下一區塊。由於資料庫不主動合併相鄰自由區塊,而是尋找最大可用區塊,久而久之會形成大量離散、微小的自由空間——即碎片。理想狀態下,單一段的資料應集中於單一區塊,減少指標查找開銷。

碎片影響

  • 效能下降:尋找足夠大的自由區塊愈發困難,空間分配偏離最佳狀態。
  • 空間浪費:SMON 僅定期合併 PCTINCREASE > 0 的自由區塊,部分碎片無法自動回收。

FSFI(自由空間碎片指數)量化評估

公式:FSFI = 100 × sqrt(MAX_EXTENT / SUM_EXTENTS) × 1 / sqrt(sqrt(COUNT_EXTENTS))

  • 最大值 100 代表理想單一檔案表空間。
  • 區塊數增加導致 FSFI 緩降;最大區塊縮小則驟降。
  • 經驗值:FSFI > 30 且有足夠自由空間 時較少遇到空間分配問題;接近閾值應排程整理。

碎片整理方案

1. 表空間層級

  • 設定 ALTER TABLESPACE <name> DEFAULT STORAGE (PCTINCREASE 1) 讓 SMON 自動合併。
  • 手動執行 ALTER TABLESPACE <name> COALESCE 立即合併相鄰自由區塊。

2. 段層級(Export/Import 重建法)

exp user/pwd file=exp.dmp compress=y grants=y indexes=y tables=(t1,t2)
-- 刪除原表 --
imp user/pwd file=exp.dmp commit=y buffer=64000 full=y

注意:COMPRESS=Y 會將 INITIAL 設為所有區塊總和。若表曾大量刪除資料,匯入時可能產生超大初始區塊,甚至超過單一資料檔上限導致失敗。建議先評估實際資料量再決定是否啟用。

3. 記憶體碎片

定期 SHUTDOWN DATABASE 可清理 SGA/PGA 記憶體碎片,維持例程效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved