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

Oracle Freelist 內部機制深度剖析:段頭、鏈表操作與高併發調優

     編輯:Oracle 資料庫基礎

Freelist 管理表空間自由空間,位於段頭區塊,透過單向鏈表串聯可用資料塊。掌握其行為對高併發 INSERT/UPDATE 系統調優至關重要。

一、Freelist 結構與運作

  • 段頭塊 (Segment Header Block) 存放指向第一個自由塊的指標。
  • 每個自由塊內部再指向下一個自由塊 → 單向鏈表。
  • FREELISTS=N → 段頭建立 N 條獨立鏈表,減少 Latch 爭用。

二、PCTFREE/PCTUSED 控制鏈表進出

  • PCTFREE (Unlink 門檻):塊使用率達 100-PCTFREE% → 從 Freelist 移除 (Unlink)。
    例:PCTFREE=10 → 90% 滿即移除,保留 10% 供行擴展。
  • PCTUSED (Relink 門檻):DELETE 後塊使用率降至 PCTUSED% 以下 → 重新加入 Freelist 表頭 (Relink)。
    例:PCTUSED=40 → 使用率 < 40% 即回鏈表最前端。

關鍵誤區:一旦 Relink,塊將**永遠留在 Freelist**,即使後續使用率超過 60%,直到達 PCTFREE 才 Unlink。非「超過 PCTUSED 即踢出」。

三、高併發調優實戰

  1. 死塊問題:預設參數導致 Freelist 塊剩餘空間 < 平均行長 → INSERT 讀死塊 → 延遲。
    對策:依平均行長與 DB_BLOCK_SIZE 科學設定 PCTFREE/PCTUSED。
  2. FREELISTS 設定:= 最大並發 INSERT Session 數。ERP 系統常見 FREELISTS=50~200。
  3. 空間重用 vs 效能取捨:
    - 效能優先 → 低 PCTUSED、高 PCTFREE、大 FREELISTS。
    - 空間優先 → 高 PCTUSED、低 PCTFREE、小 FREELISTS。

四、ASSM 取代 Freelist

  • 10g+ 推薦 SEGMENT SPACE MANAGEMENT AUTO (ASSM),使用 Bitmap 取代鏈表,自動管理、無參數調優、RAC 友善。
  • 啟用 ASSM 表空間中建表,FREELISTS/PCTUSED 參數被忽略。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved