空間層級結構
- Tablespace(表空間)← 1..N Datafiles(數據文件)
- Segment(段:表、索引、Undo、Temp 等)← 1..N Extents(區片)
- Extent(區片)← 連續 Blocks(塊,
DB_BLOCK_SIZE)
SAFE 碎片消除規則(Oracle 8i+ LMT 內建實現)
- 同一表空間內所有段**統一區片大小**:
INITIAL=NEXT、PCTINCREASE=0,或使用 MINIMUM EXTENT 子句強制倍數。
- 區片參數**僅在表空間級定義**,創建對象時**不覆蓋**。
- 區片大小按段尺寸分級(Oracle 8/8i 建議):
| 段大小 | 區片大小 |
| <128MB | 128KB |
| 128MB-4GB | 4MB |
| >4GB | 128MB |
全庫僅需 3 種區片表空間,預估對象大小放入對應表空間。
- 採用 **Locally Managed Tablespace (LMT)**:
CREATE TABLESPACE ... EXTENT MANAGEMENT LOCAL,自動滿足規則 1-3。
- 段區片數控制在 1,024 以內(DDL 性能考量),持續增長段定期遷移。
- 超大段 (4GB-128GB) 獨立表空間 + 分區表。
- 臨時表空間指定
TEMPORARY 類型。
- 回滾段視事務均衡度決定是否設
OPTIMAL。
- **嚴禁**將用戶數據放入 SYSTEM 表空間。
- 數據文件大小 = 區片整數倍 + 1 Block(LMT 為 +64KB)。
- 統一區片表空間**勿做碎片整理**;非統一區片用 Exp/Imp 重組。
- 8i+ 提供
ALTER TABLE ... MOVE、ALTER INDEX ... REBUILD 快速重組。
單區片迷思
EXPORT COMPRESS=Y 將段壓縮為單區片並無實質性能增益:
- 順序掃描受益前提是物理連續,現代 RAID 條帶化已打破邏輯/物理連續對應。
- Oracle 管理數百區片段無性能損耗。
- 單區片反而易產生表空間碎片。
段存儲參數 PCTFREE / PCTUSED
| 參數 | 含義 | 調優指引 |
| PCTFREE | 塊預留給 UPDATE 的空間% | 防止行遷移。長度可變列頻繁 UPDATE 設 15-25%;只讀/固定長度可設 5-10%。默認 10%。 |
| PCTUSED | 塊重新加入 Freelist 的使用率下限% | 避免過早擴展段。大行長度設低值 (10%);小行默認 40% 通常適宜。需滿足 Block_Size*(100-PCTFREE-PCTUSED) > Max_Row_Len。 |
正確設置兩參數可平衡空間利用率與 DML 性能,減少行遷移與段擴展頻率。