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

深入解析 Oracle ASSM 內部存儲機制與位圖塊結構

     編輯:Oracle 資料庫基礎

前言:從 Freelist 到 ASSM 的演進

在 Oracle 9i 之前,表的剩餘空間管理依賴連接列表,即 Freelist。Freelist 存在串行瓶頸,易導致段頭爭用與空間浪費,且 DBA 需投入大量精力監控空間利用率。自 Oracle 9.2.0 起,引入自動段空間管理,以位圖取代 Freelist,實現對存儲擴展與空閒塊的高效管理,顯著改善段存儲本質。採用 ASSM 的表空間所建段稱為位圖管理段。

啟用 ASSM 的表空間建立範例

CREATE TABLESPACE demo
DATAFILE '/ora01/oem/demo01.dbf' SIZE 5M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

建立後,PCTUSED、NEXT、FREELISTS 等參數將被忽略;INITIAL 仍需指定(最小 3 個塊)。位圖以四種狀態(>75%、50-75%、25-50%、<25%)追蹤每塊剩餘空間,何時使用塊由 PCTFREE 決定。

ASSM 核心優勢

  • 消除緩衝區忙等待:位圖不同部分可並發訪問,移除尋找空閒空間的串行化。
  • 極致並發插入:Oracle 測試顯示可消除所有段頭資源爭奪。
  • 簡化 DBA 運維:自動管理空間,減少人工干預。

ASSM 的限制

  • 無法控制表空間內獨立對象的存儲行為。
  • 不支援臨時表空間。
  • 僅限本地管理表空間。
  • 早期版本高 DML 負載可能有效能問題,9.2.0.4 後廣泛應用。

實戰探秘:ASSM 表結構與位圖塊層級

建立測試表 demotab 並查看初始狀態:

SQL> exec show_space('demotab');
Total Blocks.............. 128
Unused Blocks............. 125
Last Used Block........... 3

表頭佔用 3 個塊(塊 9-11),實際數據從塊 9 開始(文件頭佔 8 塊)。透過 ALTER SYSTEM DUMP DATAFILE 分析三個關鍵塊:

1. 第一級位圖塊

type: 0x20=FIRST LEVEL BITMAP BLOCK
nbits: 4, nranges: 2
unformatted: 13, total: 16
0:Metadata 1:Metadata 2:Metadata 3:unformatted ... 15:unformatted

記錄 16 個塊的空間狀態,前 3 個為元數據(位圖塊與段頭),其餘 13 個未格式化。

2. 第二級位圖塊

type: 0x21=SECOND LEVEL BITMAP BLOCK
number: 8 nfree: 8
L1 Ranges:
0x06800009 Free: 5 Inst: 1
0x06800019 Free: 5 Inst: 1  -- 對應塊 25
0x06800029 Free: 5 Inst: 1  -- 對應塊 41
...

儲存第一級位圖塊的地址(DBA),每 16 塊產生一個第一級位圖塊,第二級塊負責索引它們,形成樹狀結構。

3. 段頭塊

type: 0x23=PAGETABLE SEGMENT HEADER
Extent Map: 16 extents, 128 blocks
Highwater:: 0x0680000c ext#: 0 blk#: 3
Level 1 BMB for High HWM: 0x06800009

記錄區映射、高水位標記(HWM)及位圖塊層級指引。

插入數據後的動態變化

插入 28,985 筆資料後,show_space 顯示已用 56 塊(7 個區)。DBMS_SPACE.SPACE_USAGE 統計:

Full Blocks = 43
FS4 Blocks (75-100% free) = 6
FS1 Blocks (0-25% free) = 1
Unformatted Blocks = 0

對應位圖塊轉储:

  • 塊 9:3 元數據 + 13 FULL
  • 塊 25、41:各 1 位圖 + 15 FULL
  • 塊 57:1 位圖 + 6 FS4 + 1 FS1 + 8 未格式化

驗證:3×16 + 8 = 56 塊,完美吻合。

高水位標記(HWM)的雙重含義

段頭記錄兩個 HWM:

  • 真實 HWM:0x06800041 (十進制 65),含文件頭 8 塊 + 段頭 3 塊 + 數據 54 塊 = 65。
  • 低 HWM:0x0680000c (十進制 12),即文件頭 8 + 段頭 3 + 第一個數據塊 1 = 12,標示數據起始位置。

結語

ASSM 通過多層級位圖樹狀結構,將空間管理元數據分散在段內部,實現高並發、低爭用的自動空間管理。理解其塊結構與 HWM 機制,有助於深度診斷空間碎片、效能瓶頸及異常狀態。

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