SQL Server中的GAM頁和SGAM頁

來源:互聯網
上載者:User
簡介

    我們已經知道SQL Server IO最小的單位是頁,連續的8個頁是一個區。SQL Server需要一種方式來知道其所管轄的資料庫中的空間使用方式,這就是GAM頁和SGAM頁。

 

Global Allocation Map Page

    GAM(全域分配位元影像)是用於標識SQL Server空間使用的位元影像的頁。位於資料庫的第3個頁,也就是頁號是2的頁。下面我們通過建立一個資料庫來看其GAM的結構。建立測試資料庫的代碼如代碼所示。

CREATE DATABASE [test] ON  PRIMARY ( NAME = N'test', FILENAME = N'C:\Test\test.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ) LOG ON ( NAME = N'test_log', FILENAME = N'C:\Test\test_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO

   代碼1.建立測試資料庫

 

   資料庫建立成功後,通過查看資料庫頁號為2的頁。我們看到1所示的結果。

       

     圖1.GAM頁樣本

 

    我們看到頁內的資料通過16進位表示。也就是一個數字是4位元,兩個是一位元組。其中前4個位元組0000381f是系統資訊,slot1的後10個位元組也是系統資訊。其餘的每位表示SQL Server的一個區的狀態,0表示已指派,1表示未分配。下面我們就通過圖1所示的GAM頁來計算一下這個資料庫所佔的空間。

    我們可以看到,由於資料庫剛剛建立,分配的空間在第4-8個位元組就能表示,也就是0001c0ff。下面將0001c0ff由16進位化為2進位。結果是

    0000 0000 0000 0001 1100 0000 1111 1111

    通過計算,可以看出,上面的bit中有21個0,也就是目前資料庫已經分配了21個區,我們知道每個區是8*8k=64K。因此算出這個資料庫佔用空間(21*64)/1024=1.3125MB≈1.31MB

    下面我們通過SSMS來看資料庫實際佔用的空間,2所示。

   

    圖2.通過SSMS來看資料庫所佔的空間

 

    通過上面的計算3-1.69=1.31MB和通過GAM頁進行計算的結果完全吻合。

    那可能大家會有疑問了,那如果資料庫增長超過一個GAM所能表示的區的範圍那該怎麼辦?答案很簡單,就是再建立一個GAM頁,第二個GAM頁的位置也可以通過圖1中的資訊進行計算。圖1中slot1有7992個位元組,其中前四個位元組用於儲存系統資訊,後面7988位元組用於表示區的情況,因此所能表示的區是7988*8=63904,橫跨的頁的範圍是511232,所以第511232+1頁應該是下一個GAM頁,而頁號就會是511232頁。這個區間也就是所謂的GAM Interval,接近4GB。

 

Shared Global Allocation Map Page

    通過GAM頁可知,分配空間的最小單位是區。但假如一個非常小的索引或是表只佔1KB,但要分給其64K的空間就顯得過於奢侈了。所以當幾個表或索引都很小時,可以讓幾個表或索引公用一個區,這類區就是混合區。而只能讓一個表或索引使用的區就是統一區。SGAM位於資料庫的第四頁,也就是GAM的下一個頁。頁號為3。通過和GAM相同位置的bit組合,就能知道空間的狀態。所能表示的幾種狀態如表1所示。

  GAM SGAM位
未分配 1 0
統一區或空間使用完的混合區 0 0
含有可分配空間的混合區 0 1

表1.SGAM和GAM

 

    通過SGAM和GAM的組合,SQL Server就能知道該從哪裡分配空間。

    第二個SGAM頁位於第二個GAM頁之後,也就是頁號為511233的頁。依此類推。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.