Oracle 透過 Freelist 管理表空間中的空閒塊,PCTFREE 控制塊移出 freelist(預留擴展空間),PCTUSED 控制塊重回 freelist。兩者設定直接決定 INSERT/UPDATE 效能 與 空間利用率 的此消彼長。
PCTFREE → 移出 freelistPCTUSED → 重回 freelist| 參數 | 預設 | 高效能導向 | 高空間重用導向 | 核心影響 |
|---|---|---|---|---|
| PCTFREE | 10% | 較高(20-30%) | 較低(5-10%) | 預留行遷移/更新空間,避免鏈式行 |
| PCTUSED | 40% | 較低(20-30%) | 較高(50-60%) | 決定塊何時重回 freelist |
| FREELISTS | 1 | 並發 INSERT 數 | 1 | 減少 freelist 爭用 |
| FREELIST GROUPS | 1 | RAC 實例數 | 1 | 僅 RAC/Parallel Server 生效 |
PCTFREE/PCTUSED 必須配合 DB_BLOCK_SIZE 與 AVG_ROW_LEN 計算100-PCTFREE 也不會移出,直到再次達到 PCTFREEANALYZE TABLE ... LIST CHAINED ROWS 檢測遷移/鏈式行,調整 PCTFREEFREELISTS = 最大並發 INSERT 會話數(如 20 並發 → FREELISTS 20)ALTER TABLE ... MOVE 重組表,重置 freelist、消除碎片、修正 PCTFREE/PCTUSEDOracle 9i+ 支援 SEGMENT SPACE MANAGEMENT AUTO 表空間,以位圖取代 freelist,自動適應並發負載,強烈建議新建表空間啟用,舊表空間可考慮重建遷移。
「高效能意味著寧可浪費空間換取 INSERT 速度;高空間重用意味著接受更多 I/O 換取儲存節省。沒有銀彈,只有基於業務特徵的權衡。」
掌握 freelist 與 PCTFREE/PCTUSED 的微妙交互,您就掌握了 Oracle 空間管理調優的核心開關。