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

SQL Server 2008 IAM (索引配置映射) 頁面結構與實測

     編輯:關於SqlServer

IAM 頁面核心概念

IAM (Index Allocation Map) 頁面追蹤 4GB 區間內配置單元使用的區。每個配置單元 = 一組頁面,屬於單一資料表/索引的單一分區,由三類頁面組成:

  • 行內資料頁面 (IN_ROW_DATA)
  • 大型物件頁面 (LOB_DATA)
  • 行溢位頁面 (ROW_OVERFLOW_DATA)

IAM 分配規則

情境IAM 頁面數
單分區、單檔案、<4GB、三類資料皆有3 個 (每類 1 個)
四個分區、三類資料皆有至少 12 個 (4分區 × 3類)
分區跨多檔案每檔案各需一組 IAM
檔案 >4GB 且使用超出區間每 4GB 區間額外一組 IAM

IAM 頁面內部結構

  • 頁首:8 個頁面指標槽 (指向混合區中的頁面,僅首個 IAM 有值)
  • 位元組映射:每個 bit 對應一個區,1=已配置,0=未配置
  • 涵蓋範圍:約 512,000 頁面 (4GB / 8KB)
  • 隨機分佈於資料庫中,依需配置

實測範例:建立測試表並檢視 IAM

-- 1. 建立位址轉換函數
CREATE FUNCTION dbo.f_get_page(@page_num BINARY(6))
RETURNS VARCHAR(11)
AS BEGIN
    RETURN (CONVERT(VARCHAR(2), (CONVERT(INT, SUBSTRING(@page_num,6,1))*POWER(2,8)) + 
            (CONVERT(INT, SUBSTRING(@page_num,5,1)))) + ':' +
            CONVERT(VARCHAR(11),
            (CONVERT(INT, SUBSTRING(@page_num,4,1))*POWER(2,24)) +
            (CONVERT(INT, SUBSTRING(@page_num,3,1))*POWER(2,16)) +
            (CONVERT(INT, SUBSTRING(@page_num,2,1))*POWER(2,8)) +
            (CONVERT(INT, SUBSTRING(@page_num,1,1)))));
END

-- 2. 從系統表建立測試表
SELECT * INTO testIAM FROM master.sys.objects;

-- 3. 查詢配置單元資訊與 IAM 位址
SELECT total_pages, used_pages, data_pages,
       first_page, root_page, first_iam_page,
       testdb.dbo.f_get_page(first_page) first_page_address,
       testdb.dbo.f_get_page(root_page) root_address,
       testdb.dbo.f_get_page(first_iam_page) IAM_address
FROM sys.system_internals_allocation_units
WHERE container_id IN (
    SELECT partition_id FROM sys.partitions
    WHERE object_id IN (SELECT object_id FROM sys.objects WHERE name IN ('testIAM'))
);

-- 4. 使用 DBCC PAGE 檢視 IAM 內容
DBCC PAGE(testdb, 1, 80, 3)  -- 檔案1, 頁面80, 輸出選項3

DBCC PAGE 輸出解讀

輸出包含:IAM 頁首、配置單元 ID、第一個區位址、8 個頁面指標、位元組映射區域。透過位元組映射可追蹤該配置單元擁有的所有區。

實務應用

  • 空間使用分析:結合 IAM 位元組映射計算實際配置區數
  • 碎片診斷:觀察區分配連續性
  • 損壞修復:DBCC CHECKDB 會驗證 IAM 與配置單元一致性
  • 分區管理:每個分區獨立 IAM 鏈,支援分區切換、截斷
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved