Sql Server 管理區分配(GAM,SGAM)和可用空間(PAM)的原理

來源:互聯網
上載者:User
之前就詳細看過,可是今天又回頭看到這裡的時候,卻發現忘的差不多了,真悲劇,看來還是要記錄下比較好啊。

Sql Server 區管理(GAM,SGAM)

大家都知道Sql Server 中資料檔案儲存的最小單位是頁面(Page),但實際SQLSERVE並不是以頁面為單位給資料分配空間的,Sql Server預設的儲存分配單位是盤區(Extend)。這樣做的主要原因是為了避免頻繁的讀寫IO,提升效能。在表或其它對象分配儲存空間,不是直接分配一個8K的頁面,而是以一個盤區(Extend)為儲存分配單位,一個盤區為8個頁面(Size = 8*8K=64K)。

這樣,對區得操作就會非常頻繁,也要求Sql Server有自己的一套系統管理著數量眾多的區。其中最突出的出一個問題,那就是在儲存那些只有少量資料,不足8K的對象,如果也是分配給一個盤區,就會存在儲存空間上的浪費,降低了空間分配效率。

為解決上述問題,SQLSERVER提供了一種解決方案,定義了兩種盤區類型,統一盤區和混合盤區。

全域分配映射表 (GAM) :統一盤區,GAM 頁記錄已指派的區。每個 GAM 包含 64,000 個區,相當於近 4 GB 的資料。GAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區可用;如果位為 0,則區已指派。

共用全域分配映射表 (SGAM) :由多個對象共同擁有該盤區,SGAM 頁記錄當前用作混合區且至少有一個未使用的頁的區。每個 SGAM 包含 64,000 個區,相當於近 4 GB 的資料。SGAM 用一個位來表示所涵蓋區間內的每個區的狀態。如果位為 1,則區正用作混合區且有可用頁。如果位為 0,則區未用作混合區,或者雖然用作混合區但其所有頁均在使用中。

在實際為對象分配儲存盤區時,為了提高空間利用率,預設的情況下,如果一個對象一開始大小小於8個頁面,就盡量放在混合盤區中,如果該對象大小增加到8個頁面後,SQLSERVER會為這個對象重新分配一個統一盤區。

據區當前的使用方式,GAM 和 SGAM 中每個區具有以下位元模式:

這將簡化區管理演算法。若要分配統一區,資料庫引擎將在 GAM 中搜尋為 1 的位,並將其設定為 0。若要尋找具有可用頁的混合區,資料庫引擎將在 SGAM 中搜尋為 1 的位。若要分配混合區,資料庫引擎將在 GAM 中搜尋為 1 的位,將其設定為 0,然後將 SGAM 中對應的位設定為 1。若要釋放區,資料庫引擎確保將 GAM 位設定為 1,將 SGAM 位設定為 0。實際上,資料庫引擎內部使用的演算法比本主題中介紹的更為複雜,因為資料庫引擎在資料庫中均勻分布資料。但是,由於無需管理區分配資訊鏈,因此即使是實際演算法也會被簡化。

管理Sql Server可用空間

首先摘錄段 MSDN 的一段官方解釋:

頁可用空間 (PFS) 頁記錄每頁的分配狀態,是否已指派單個頁以及每頁的可用空間量。PFS 對每頁都有一個位元組,記錄該頁是否已指派。如果已指派,則記錄該頁是為空白、已滿 1% 到 50%、已滿 51% 到 80%、已滿 81% 到 95% 還是已滿 96% 到 100%。

將區分配給對象後,資料庫引擎將使用 PFS 頁來記錄區中的哪些頁已指派或哪些頁可用。資料庫引擎必須分配新頁時,將使用此資訊。保留的頁中的可用空間量僅用於堆和 Text/Image 頁。資料庫引擎必須找到一個具有可用空間的頁來儲存新插入的行時,使用此資訊。索引不要求跟蹤頁的可用空間,因為插入新行的點是由索引索引值設定的。

在資料檔案中,PFS 頁是檔案頭頁之後的第一頁(頁碼為 1)。接著是 GAM 頁(頁碼為 2),然後是 SGAM 頁(頁碼為 3)。第一個 PFS 頁之後是一個大小大約為 8,000 頁的 PFS 頁。在第 2 頁的第一個 GAM 頁之後還有另一個 GAM 頁(包含 64,000 個區),在第 3 頁的第一個 SGAM 頁之後也有另一個 SGAM 頁(包含 64,000 個區)。顯示了資料庫引擎用來分配和管理區的頁順序。

看過之後,讓人一頭霧水,真是不知所云,真佩服這些 MSDN 是如何翻譯的,看來中文 MSDN 太不靠譜,最後沒辦法,只能google了

其實上面說的意思就是:Sql Server 管理可用空間的方法是,尋找每個每個頁面是否使用,以及使用方式情況。這時就需要一個頁面來記錄各個頁面的使用方式了,這就是 PFS 頁。

PFS(Page Free Space),也叫頁面自由空間,該頁面用來跟蹤一個檔案中每一個特定的頁面的利用率情況。一個檔案中第二個頁面(頁碼1)就是PFS頁面,該頁面的每個位元組都記錄了相應頁面的分配情況、頁面類型、是否IAM頁、是否包含刪除記錄、以及空間利用率資訊;PFS能夠管理和跟蹤8088個頁面的使用方式,即接近64M的空間,以後每8088個頁面將再出現一次

讓我們首先瞭解一下PFS的頁面管理位元組的構造,管理單位為位元組,每位元組管理一個頁面。

   

第0個bit為保留位元組,始終為0

第1個bit表示該頁面是否已指派,我們知道GAM頁用來管理區是否已指派,但一個區包含8個頁面,所以用該bit用來準確定位該區的某個頁面是否已指派出去了。

第2個bit表示該頁面是否混合分區的一個頁面。

第3個bit表示該頁面是否是一個IAM(索引配置對應)頁面。

第4個bit表示該頁面中是否包含幻影或已刪除記錄,這有助於SQL Server定期清理幻影或已刪除記錄。

第5~7個頁面表示該頁面的空間使用率情況。

相關文章

聯繫我們

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