Преглед на страницата GAM, SGAM и PFS

Общ преглед: страници GAM, SGAM и PFS

В предишната статия говорих за екстенти, а още по-рано говорих за това как екстентите и страниците, които се разпространяват от IAM веригата, се проследяват в IAM страниците. Това, което не казах, е как се проследява състоянието на разпространение на отделните страници или какви са принципите за работа с битови маски за разпределение. Това ще бъде темата на тази статия. Това ще бъде последната статия от поредица от статии за основните обекти, които са били необходими за изследване на дистрибуции, проверени от инструментите CHECKDB, но това ще бъде темата за следващата статия, която също ще бъде посветена на някои сценарии за проява на възможни проблеми. Имайте предвид, че всичко написано по-долу е едно и също за SQL Server 2000 и 2005.

GAM е съкращение от Global Allocation Map. Както си спомняте, файловете на базата данни (които съхраняват данни, а не регистрационни файлове) се разбиват на GAM интервали (не се бъркайте - те не се разбиват физически, а само концептуално). GAM интервалът е еквивалентен на сумата от пространството на битовата маска за последователностите от страници GAM, SGAM и IAM. Това са 64 000 екстента или почти 4 GB. Тези битови маски са с еднакъв размер за всеки от тези три типа страници и съдържат по един бит на екстент, но значението на тези битове е различно за различните типове страници за разпределение. Нещо, което трябва да се отбележи, е, че в началото на всеки GAM интервал има GAM екстент, който съдържа глобалните страници за разпределение, необходими за проследяване на този GAM интервал. Този GAM екстент не може да се използва за други разпределения на страници. Битовете в GAM маската имат следната семантика:

бит = 1: степента е достъпна за разпределение (някой може да си помисли, че е обратното, в момента евремето на страницата GAM е маркирано като разпределено);

bit = 0: Степента вече е разпределена за използване.

Тази семантика е една и съща за смесени и специализирани екстенти.

Спомням си миналата година, че участвах в имейл дискусия за това какво означава „S“ в SGAM. Различни имена са използвани в и извън Microsoft през последните години, но официалното име е това, използвано от Books Online - Споделена глобална карта за разпределение. Честно казано, обикновено произнасяме това съкращение така: „es-gams“ и едва ли ще можем ясно да обясним защо... Както казах по-горе, битовата маска SGAM е точно същата като битовата маска GAM и структурата и интервалът, които покрива, но семантиката на битовете е различна:

bit = 1: означава, че екстентът е смесен и има поне една свободна страница, достъпна за използване;

bit = 0: специализиран екстент или смесен екстент без свободни страници (по същество същата ситуация, в която SGAM се използва за намиране на смесени екстенти със свободни страници).

Страници GAM, SGAM и IAM

И така, нека обединим страниците GAM, SGAM и IAM (не забравяйте, че в битовата маска на IAM битът е зададен, ако степента е разпределена към веригата/модула за разпределение на IAM), за да видите възможните комбинации от битове: