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

Oracle 儲存結構核心概念:表空間、段、區、塊層級關係與效能啟示

     編輯:Oracle 資料庫基礎

邏輯儲存階層(由大到小)

資料庫
  └─ 表空間
       └─ 段
            └─ 區
                 └─ 區塊
                      └─ 作業系統區塊

核心關係圖解

層級說明關鍵規則
表空間邏輯容器,由 1~N 個資料檔組成一個段不能跨表空間
資料檔物理檔案,屬於單一表空間一個區不能跨資料檔
段儲存特定類型資料(表、索引、UNDO、臨時)段與資料檔為多對多(透過區映射)
區連續區塊集合,空間分配單位最小 1 區塊,均勻/自動分配模式
區塊Oracle I/O 最小單位 (DB_BLOCK_SIZE)典型 8KB,含頭部、行目錄、行資料、自由空間

為什麼「小表查詢也慢」?

常見原因不在表大小,而在儲存結構細節:

  • 高水位標記 (HWM) 過高:大量刪除後 HWM 未下降,全表掃描讀取大量空白區塊
  • 行遷移/鏈接:PCTFREE 設定不當導致行跨區塊,單行讀取多次 I/O
  • 索引碎片:大量 DML 後索引高度增加、葉子塊稀疏
  • 統計資訊過期:優化器誤估基數,選錯執行計劃

診斷查詢

-- 段空間使用與 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';

優化行動

  1. ALTER TABLE ... MOVE 重組表 → 降低 HWM、消除行遷移
  2. ALTER INDEX ... REBUILD 或 COALESCE → 整理索引結構
  3. DBMS_STATS.GATHER_TABLE_STATS → 更新統計資訊
  4. 調整 PCTFREE/PCTUSED 適應更新模式
理解儲存結構是從「會寫 SQL」進階到「會調優 DBA」的分水嶺。段、區、塊不是抽象概念,直接決定 I/O 次數與 CPU 消耗。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved