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

Oracle 專家調優秘笈:深度解析 Freelist、PCTFREE/PCTUSED 與空間管理競爭優化

     編輯:Oracle 資料庫基礎

核心矛盾:高效能 vs 高空間重用率

Oracle 透過 Freelist 管理表空間中的空閒塊,PCTFREE 控制塊移出 freelist(預留擴展空間),PCTUSED 控制塊重回 freelist。兩者設定直接決定 INSERT/UPDATE 效能 與 空間利用率 的此消彼長。

Freelist 運作機制

  • 位於段頭塊,維護可用塊鏈表
  • INSERT 時掃描 freelist 尋找可容納新行的塊
  • 塊滿達 PCTFREE → 移出 freelist
  • DELETE 後使用率跌破 PCTUSED → 重回 freelist

參數設定黃金法則

參數預設高效能導向高空間重用導向核心影響
PCTFREE10%較高(20-30%)較低(5-10%)預留行遷移/更新空間,避免鏈式行
PCTUSED40%較低(20-30%)較高(50-60%)決定塊何時重回 freelist
FREELISTS1並發 INSERT 數1減少 freelist 爭用
FREELIST GROUPS1RAC 實例數1僅 RAC/Parallel Server 生效

常見誤區與災難後果

  1. 盲信預設值:導致 freelist 充滿「死塊」(無法容納單行),Oracle 掃描 5 個死塊後才擴展新塊,嚴重拖慢 INSERT
  2. 忽略平均行長與區塊大小:PCTFREE/PCTUSED 必須配合 DB_BLOCK_SIZE 與 AVG_ROW_LEN 計算
  3. 誤解塊重回 freelist 行為:一次 DELETE 讓塊重回 freelist 後,即使使用率超過 100-PCTFREE 也不會移出,直到再次達到 PCTFREE

ERP/高併發 DML 環境調優清單

  1. 依 ANALYZE TABLE ... LIST CHAINED ROWS 檢測遷移/鏈式行,調整 PCTFREE
  2. 設定 FREELISTS = 最大並發 INSERT 會話數(如 20 並發 → FREELISTS 20)
  3. 單一大量清除作業會將所有空閒塊集中單一 freelist,造成後續 INSERT 熱點,建議分批清除或重建表
  4. 表同時有 INSERT 必有 DELETE,否則 freelist 逐漸枯竭,頻繁擴展程度
  5. 使用 ALTER TABLE ... MOVE 重組表,重置 freelist、消除碎片、修正 PCTFREE/PCTUSED

進階技巧:ASSM(自動段空間管理)

Oracle 9i+ 支援 SEGMENT SPACE MANAGEMENT AUTO 表空間,以位圖取代 freelist,自動適應並發負載,強烈建議新建表空間啟用,舊表空間可考慮重建遷移。

專家心法總結

「高效能意味著寧可浪費空間換取 INSERT 速度;高空間重用意味著接受更多 I/O 換取儲存節省。沒有銀彈,只有基於業務特徵的權衡。」

掌握 freelist 與 PCTFREE/PCTUSED 的微妙交互,您就掌握了 Oracle 空間管理調優的核心開關。

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