SQL Server :理解IAM 頁

來源:互聯網
上載者:User

標籤:

原文:SQL Server :理解IAM 頁

在以前的文章裡,我們討論了資料頁,GAM和SGAM,還有PFS頁。今天我們一起來討論下索引配置對應(Index Allocation Map:IAM)頁。

在SQL Server 2005和以後的版本裡,配置單位(allocation units)以下三個類型:

  • IN_ROW_DATA 

    用於儲存堆分區或索引分割區,即heap和B-tree。

  • LOB_DATA

    用於儲存大型物件 (LOB) 資料類型,例如 xml、varbinary(max) 和 varchar(max)。

  • ROW_OVERFLOW_DATA

    用於儲存超過 8,060 位元組行大小限制的 varchar、nvarchar、varbinary 或 sql_variant 列中儲存的可變長度資料。 

在我們討論GAM和SGAM頁時,我們注意到,一個GAM頁可以跟蹤4GB的空間並每4GB空間增加一個GAM頁。一個IAM頁是用來跟蹤,表的指定配置單位,在分區的GAM區間裡,頁或區的分配情況。讓我們通過執行個體來示範下。

我們建立一個包含3列varchar(3000)資料類型和1列LOB資料類型,還有一列INT資料類型的表。這樣我們的表就包含裡三類配置單位。

 1 USE InternalStorageFormat 2 GO 3  4 CREATE TABLE IAMTable( 5 Id INT, 6 col1 VARCHAR(3000), 7 col2 VARCHAR(3000), 8 col3 VARCHAR(3000), 9 Lobdata NTEXT)10 GO

我們往表裡插入資料

1 INSERT  INTO IAMTable2 VALUES  ( 1, ‘A‘, ‘B‘, ‘C‘, N‘Test‘ )

這裡我們插入的1條資料不會產生溢出行(row overflow)。我們使用DBCC IND命令列出分配給這個表的頁。

1 DBCC IND(‘InternalStorageFormat‘,‘IAMTable‘,1)

從可以清楚看到,SQL Server為我們這個表分配了2個IAM頁(page type為10),用來跟蹤In-row data和LOB data的分配。因為當前的記錄大小不足以建立ROW_OVERFLOW_DATA,SQL Server沒有給我們分配一個IAM頁來跟蹤ROW_OVERFLOW_DATA的分配。

我們來插入一條可以讓SQL Serve產生ROW_OVERFLOW_DATA,並用DBCC IND命令查看頁面分配情況。

1 INSERT  INTO IAMTable2 VALUES  ( 1, REPLICATE(‘A‘,3000), REPLICATE(‘A‘,3000), REPLICATE(‘A‘,3000), N‘Test‘ )3 4 DBCC IND(‘InternalStorageFormat‘,‘IAMTable‘,1)

現在表已經有了所有這3類配置單位。如果我們這表上有更多的分區,那就每個區都有獨立的一系列IAM頁。可以給你一個清晰的展示。

簡而言之,堆或B樹結構至少有一個IAM頁,最多有3倍分區個IAM頁。如果表繼續增長,頁分配在不同的GAM區間,會有更多的IAM頁增加。這些IAM頁會連結起來,這個列表叫IAM鏈。

現在我們已經知道了IAM頁的用處,讓我們一起看看在IAM頁裡是什麼樣的。我們知道,表或索引的第一個8頁會分配在混合區的單個頁面裡。從剛才的圖片我們知道175頁是用來跟蹤in-row data配置單位的IAM頁,我們用DBCC PAGE命令看看頁裡面的資訊是什麼。

1 DBCC TRACEON(3604)2 go3 DBCC PAGE(‘InternalStorageFormat‘,1,175,3)

在 IAM:Header地區,我們看到下欄欄位:

  • sequenceNumber = 0          這是IAM頁在IAM鏈中的位置。在IAM鏈中每增加1個IAM頁,這裡會加1。      
  • status = 0x0                       未使用。 
  • objectId = 0                        未使用。
  • indexId = 0                         未使用。
  • page_count = 0                   未使用。
  • start_pg = (1:0)                  這是頁面映射的GAM區間。儲存著在映射的GAM區間的第一個頁ID。

Single Page allocation 地區:這裡顯示的是從混合區分配的第1個8頁。在第8頁後,SQL開始從統一區分配。因此這個部分只用在第一個IAM頁鏈。174和210頁是從混合區分配的,這個和剛才DBCC IND(‘InternalStorageFormat‘,‘IAMTable‘,1)輸出結果一致。

Extent Alloc 地區:這裡顯示的是配置單位區分配。

我們執行下列語句,往表裡插入7條記錄,這樣的話,我們表裡就有9條記錄了,再用DBCC PAGE看下IAM頁的資訊。

1 INSERT  INTO IAMTable2 VALUES  ( 1, REPLICATE(‘A‘,3000), REPLICATE(‘A‘,3000), REPLICATE(‘A‘,3000), N‘Test‘ )3 go 74 5 DBCC TRACEON(3604)6 go7 DBCC PAGE(‘InternalStorageFormat‘,1,175,3)

可以看到

紅色地區:自174,210之後,增加了212,214,215,217, 218,220,共8個頁面,即混合區分配完成。

藍色地區:從224開始分配統一區了。

使用DBCC IND查看下頁面分配情況,完全一致:

1 DBCC IND(‘InternalStorageFormat‘,‘IAMTable‘,1)

 

 

SQL Server :理解IAM 頁

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.