Несколько вопросов о SGAM & GAM & IAM & PFS в SQL Server

8

Есть несколько вопросов о внутренней структуре SQL Server.

Предположим, что у нас есть таблица в базе данных.

  1. Страницы SGAM и GAM отслеживают общие и единообразные экстенты в пределах одного интервала GAM (~ 4 ГБ) и помогают нам найти соответствующий тип экстента при выделении страниц / экстентов (первоначально первые 8 страниц выделяются из смешанных экстентов, и позиции этих страниц записывать на страницы IAM, а затем - на экстенты GAM (единообразные экстенты), и эта информация сохраняется на следующей связанной IAM-странице).

    Допустим, страницы для таблицы были выделены, а размер таблицы превышает 8 страниц, а спустя некоторое время строки были удалены, оставляя место для повторного использования. Как SQL Server знает, что экстенты имеют свободное место?

    На страницах есть информация о размере свободного места, но проверка каждой страницы занимает слишком много времени. Биты на страницах SGAM и GAM не говорят нам ничего, кроме того, что расширение выделено или имеет несколько свободных страниц (вся страница свободна, а не частично).

  2. Заголовок файла и страницы SGAM, GAM и IAM находятся среди первых страниц в файле. Какая структура данных фактически указывает на них?

газетная бумага
источник

Ответы:

11

Как SQL Server знает, что экстенты имеют свободное место?

SQL Server отслеживает свободное место на странице, в таблицах кучи, а также на страницах больших объектов, используя внутреннюю страницу PSF .

Кроме того, вы можете использовать sys.dm_db_file_space_usageDMV, чтобы узнать total_page_count, allocated_extent_page_countа также unallocated_extent_page_countв базе данных.

Страницы свободного пространства страницы (PFS) записывают состояние выделения каждой страницы, была ли выделена отдельная страница, а также объем свободного места на каждой странице. PFS имеет один байт для каждой страницы, который записывает, выделена ли страница, и если да, то пустая ли она, заполнена от 1 до 50 процентов, заполнена от 51 до 80 процентов, заполнена от 81 до 95 процентов или заполнена от 96 до 100 процентов.

Страница PFS является первой страницей после страницы заголовка файла в файле данных (страница № 1). Затем следует страница GAM (страница № 2), а затем страница SGAM (страница 3). Существует страница PFS размером примерно 8 000 страниц после первой страницы PFS. Существует еще одна страница GAM на 64 000 экстентов после первой страницы GAM на странице 2, и еще одна страница SGAM на 64 000 экстентов после первой страницы SGAM на странице 3. На следующем рисунке показана последовательность страниц, используемая компонентом Database Engine для выделения и управления экстентами.

Нажмите здесь, чтобы увеличить - вывод с использованием DBCC PAGE

введите описание изображения здесь

См .: Внутри хранилища: GAM, SGAM, PFS и другие карты распределения.

Заголовок файла и страницы SGAM, GAM и IAM находятся среди первых страниц в файле. Какая структура данных фактически указывает на них?

Я не понимаю этот вопрос. Наименьшая единица хранения - страница. Восемь 8К страниц образуют экстент. Ниже приводится то, что включает в себя страницу данных :

введите описание изображения здесь

Я очень рекомендую прочитать блог SQLSkills.com, в котором Пол и его команда много пишут о внутренностях SQL Server .

Кин Шах
источник