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

Oracle 儲存結構深度解析:資料檔、表空間、段、區、區塊

     編輯:Oracle 教學

Oracle 儲存結構深度解析:資料檔、表空間、段、區、區塊

理解 Oracle 邏輯與物理儲存層次,是容量規劃、效能調校與故障排查的基礎。本文從資料檔到區塊逐層剖析,並說明區塊管理模式(本地/字典)與段空間管理(PCTFREE/PCTUSED)關鍵參數。

一、儲存層次關係圖

資料檔 (Datafile)
    │
    └─ 表空間
         │
         └─ 段
              │
              └─ 區
                   │
                   └─ 區塊

二、核心規則

  1. 資料檔:一個資料檔同一時間僅屬於一個表空間;表空間可包含多個資料檔。
  2. 段:可跨資料檔(同一表空間內),一般不跨表空間;分區表 可跨表空間,堆表 不可。
  3. 區:由連續區塊組成,不可跨資料檔。
  4. 區塊:最小 I/O 單位,標準大小由 DB_BLOCK_SIZE 決定。

三、區空間管理模式

模式機制適用場景
字典管理 (Dictionary Managed)UET$ (Used) / FET$ (Free) 字典表記錄舊版相容,高併發下字典爭用嚴重
本地管理 (Locally Managed) ★預設位圖 在區塊標記 0/1,無需字典查詢高併發、大型表空間,自動合併相鄰自由區

查詢表空間管理模式:

SELECT TABLESPACE_NAME, EXTENT_MANAGEMENT FROM DBA_TABLESPACES;

四、段空間管理:PCTFREE / PCTUSED

  • PCTFREE (預設 10%):區塊預留給更新使用的自由空間比例。達到閾值後不再插入新列,避免列遷移。
  • PCTUSED (預設 40%):區塊自由空間降至此比例以下才重新納入插入清單,防止頻繁進出清單造成 CPU 浪費。

自動段空間管理 (ASSM):建表空間指定 SEGMENT SPACE MANAGEMENT AUTO,以位圖取代 PCTFREE/PCTUSED,Oracle 10g+ 強烈建議啟用。

五、區塊參數:INITRANS / MAXTRANS

  • INITRANS:區塊頭預留的交易槽初始數(預設 1/2 視物件類型)。
  • MAXTRANS:歷史參數,10g+ 已忽略,實際上限由區塊大小決定(最多 255)。

六、快速查詢標準區塊大小

SHOW PARAMETER BLOCK_SIZE
-- 或
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'db_block_size';

七、實務建議

  • 新建表空間一律採用 本地管理 + ASSM:CREATE TABLESPACE ... EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO。
  • 大表預估列長度變動大時,適當調高 PCTFREE(如 20%)減少列遷移。
  • 定期監控 DBA_FREE_SPACE、DBA_SEGMENTS 掌握碎片與水位。

熟悉儲存結構與參數,能從根源上解決空間浪費、列遷移、區塊爭用等經典效能問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved