Огляд сторінки GAM, SGAM та PFS
Огляд: сторінки GAM, SGAM та PFS
У попередній статті я розповів про екстенти, а ще раніше говорив про те, як екстенти та сторінки, розподілені ланцюжком IAM, відстежуються сторінками IAM. Що я не сказав, то це те, як відстежується стан розподілу окремих сторінок, або які принципи роботи з бітовими масками розподілу. Це і буде темою цієї статті. Це буде останньою статтею із серії статей, присвячених базовим сутностям, які були необхідні для вивчення розподілів, що перевіряються засобами CHECKDB, але це вже буде тема для наступної статті, яка також буде присвячена деяким сценаріям прояву можливих проблем. Майте на увазі, що все написане нижче однаково для SQL Server 2000 і для 2005.
GAM – це абревіатура Global Allocation Map. Як пам'ятаєте, файли бази даних (у яких зберігаються дані, а чи не журнали) розбиті на інтервали GAM (не заплутайтеся - вони не розбиті фізично, лише концептуально). Інтервал GAM еквівалентний сумі місця за бітовими масками для послідовностей сторінок GAM, SGAM та IAM. Це становить 64 000 екстентів або майже 4GB. Ці бітові маски мають однаковий розмір для кожного із зазначених трьох типів сторінки, і містити по одному біту на екстент, але призначення цих бітів відрізняється для різних типів сторінок розподілу. На що варто звернути увагу, так це на те, що на початку кожного інтервалу GAM знаходиться GAM-екстент, який містить сторінки глобального розподілу, необхідні для відстеження цього інтервалу GAM. Цей GAM-екстент не може використовуватися для жодних інших розподілів сторінки. Біти в масці GAM мають наступну семантику:
біт = 1: екстент доступний для розподілу (можна було подумати, що навпаки, він в даний часчас на сторінці GAM позначений розподіленим);
біт = 0: екстент вже розподілено для використання.
Ця семантика однакова для змішаних та спеціалізованих екстентів.
Я згадую минулий рік, коли брав участь в обговоренні електронною поштою того, що означає буква 'S' в абревіатурі SGAM. Всередині та поза Microsoft в останні роки використовувалися різні назви, але офіційною назвою можна вважати те, що використовується в Books Online – Shared Global Allocation Map. Чесно кажучи, у нас прийнято вимовляти цю абревіатуру так: 'ес-гамс' і ми навряд чи зможемо зрозуміло пояснити чому ... Як я говорив вище, бітова маска SGAM така сама, як і бітова маска GAM, і структурою та інтервалом , який вона охоплює, але семантика бітів відрізняється:
біт = 1: означає, що екстент змішаний і має не менше однієї вільної сторінки, доступної для використання;
біт = 0: спеціалізований екстент або змішаний екстент без вільних сторінок (по суті, це та сама ситуація, при якій SGAM використовується для знаходження змішаних екстентів з вільними сторінками).
Сторінки GAM, SGAM та IAM
І так, зведемо разом сторінки GAM, SGAM і IAM (пам'ятайте, що в бітовій масці IAM, біт встановлюється якщо екстент розподілений модулю ланцюжка/розподілу IAM), щоб побачити можливі комбінації бітів: