資料庫
└─ 表空間
└─ 段
└─ 區
└─ 區塊
└─ 作業系統區塊
| 層級 | 說明 | 關鍵規則 |
|---|---|---|
| 表空間 | 邏輯容器,由 1~N 個資料檔組成 | 一個段不能跨表空間 |
| 資料檔 | 物理檔案,屬於單一表空間 | 一個區不能跨資料檔 |
| 段 | 儲存特定類型資料(表、索引、UNDO、臨時) | 段與資料檔為多對多(透過區映射) |
| 區 | 連續區塊集合,空間分配單位 | 最小 1 區塊,均勻/自動分配模式 |
| 區塊 | Oracle I/O 最小單位 (DB_BLOCK_SIZE) | 典型 8KB,含頭部、行目錄、行資料、自由空間 |
常見原因不在表大小,而在儲存結構細節:
PCTFREE 設定不當導致行跨區塊,單行讀取多次 I/O-- 段空間使用與 HWM
SELECT SEGMENT_NAME, BYTES/1024/1024 MB, BLOCKS, EMPTY_BLOCKS
FROM DBA_SEGMENTS WHERE OWNER='SCOTT' AND SEGMENT_NAME='EMP';
-- 區塊層級統計
SELECT TABLE_NAME, AVG_ROW_LEN, NUM_ROWS, BLOCKS, EMPTY_BLOCKS
FROM DBA_TABLES WHERE OWNER='SCOTT';
-- 索引健康度
SELECT INDEX_NAME, HEIGHT, LF_BLKS, DEL_LF_ROWS, PCT_USED
FROM INDEX_STATS WHERE NAME='PK_EMP';
ALTER TABLE ... MOVE 重組表 → 降低 HWM、消除行遷移ALTER INDEX ... REBUILD 或 COALESCE → 整理索引結構DBMS_STATS.GATHER_TABLE_STATS → 更新統計資訊PCTFREE/PCTUSED 適應更新模式理解儲存結構是從「會寫 SQL」進階到「會調優 DBA」的分水嶺。段、區、塊不是抽象概念,直接決定 I/O 次數與 CPU 消耗。