Freelist 核心機制
Oracle 透過 Freelist 管理表空間可用區塊。Freelist 串結構位於 Segment Header(第一個區塊)。PCTFREE 控制 Unlink(移出 Freelist),PCTUSED 控制 Relink(重回 Freelist)。
參數互動邏輯
PCTFREE=10:區塊保留 10% 空間供列更新擴展,使用率達 90% 時移出 Freelist
PCTUSED=40:區塊使用率降至 40% 以下時重回 Freelist
關鍵誤區:重回 Freelist 後的行為
常見錯誤認知:區塊重回 Freelist 後,使用率超過 60% 會再次移出。
正確機制:區塊一旦因刪除操作重回 Freelist,將持續留在 Freelist 中直到達到 PCTFREE 閾值。即使使用率暫時超過 60%(100%-PCTFREE),也不會移出。只有滿足 PCTFREE 條件才 Unlink。
高 PCTUSED vs 低 PCTUSED 的效能抉擇
| 策略 | PCTUSED 設定 | 適用場景 | 風險 |
| 積極空間重用 | 高值(如 60-80) | 儲存空間昂貴、資料變動大、歷史資料較少 | 頻繁區塊滿載、I/O 增加、Freelist 爭用 |
| 優先插入效能 | 低值(如 20-40) | 高併發插入、OLTP 核心表、儲存成本可接受 | 空間碎片增加、可能需定期重組 |
Freelist 爭用診斷
-- 檢視 Freelist 等待
SELECT * FROM V$WAITSTAT WHERE CLASS = 'free list';
-- 區塊層級爭用分析
SELECT file#, block#, class, count(*)
FROM V$WAITSTAT, V$SESSION_WAIT
WHERE event = 'buffer busy waits' AND p1 = file# AND p2 = block#
GROUP BY file#, block#, class;
調優建議
- 依平均列長與區塊大小計算合理 PCTUSED,確保 Freelist 區塊至少容納 1 列
- 高併發 INSERT 表:設定適當 FREELISTS,考慮分區表消除熱點
- 定期監控
CHAIN_CNT、AVG_SPACE 判斷是否需重組
- ERP 核心交易表:優先效能,接受適度空間浪費
- 歷史歸檔表:優先空間重用,設定較高 PCTUSED
相關參數速查
PCTFREE:預留更新空間,防止列遷移
PCTUSED:控制區塊重回 Freelist 門檻
FREELISTS:平行插入 Freelist 數量
FREELIST GROUPS:RAC 實例級 Freelist 隔離
- 上一篇文章: Oracle 儲存參數調優指南:PCTFREE、PCTUSED、FREELISTS 與 FREELIST GROUPS 實戰原則
- 下一篇文章: SQL Server 連結伺服器即時查詢 Oracle:架構、設定與 Schema/SID 概念對照
Copyright ©
程式碼之家 All Rights Reserved