Поделиться через


Управление дисковым пространством, занятым объектами

Страница карты распределения индекса (Index Allocation Map, IAM) сопоставляет экстенты в 4-гигабайтном фрагменте файла базы данных с используемой единицей размещения. Единица размещения может иметь один из трех типов:

  • IN_ROW_DATA
    Содержит секцию кучи или индекса.
  • LOB_DATA
    Содержит типы данных больших объектов (LOB), например: xml, varbinary(max) или varchar(max).
  • ROW_OVERFLOW_DATA
    Содержит данные переменной длины, которые хранятся в столбцах varchar, nvarchar, varbinary или sql_variant и превышают допустимый размер строки 8060 байт.

В каждой секции кучи или индекса содержится по крайней мере одна единица размещения IN_ROW_DATA. Кроме того, в зависимости от схемы кучи или индекса, там могут содержаться единицы размещения LOB_DATA или ROW_OVERFLOW_DATA. Дополнительные сведения о единицах размещения см. в разделе Организация таблиц и индексов.

IAM-страница охватывает в файле диапазон 4 ГБ, то есть столько же, сколько и страница GAM или SGAM. Если в единице размещения содержатся экстенты из более чем одного файла или фрагмент файла размером более 4 ГБ, то несколько IAM-страниц будут объединены в IAM-цепочку. Таким образом, каждая единица размещения содержит как минимум одну IAM-страницу для каждого из файлов, в которых содержатся ее экстенты. Для файла может существовать несколько IAM-страниц, если размер экстентов файла, назначенного единице размещения, превышает объем, который может быть записан в одной IAM-странице.

Экстенты, управляющие IAM-страницами

IAM-страницы для каждой единицы размещения выделяются по необходимости и располагаются в файле в случайном порядке. Системное представление sys.system_internals_allocation_units указывает на первую IAM-страницу единицы размещения. Все IAM-страницы, относящиеся к одной единице размещения, объединяются в цепочку.

ms187501.note(ru-ru,SQL.90).gifВажно!
Системное представление sys.system_internals_allocation_units предназначено только для внутреннего использования и может быть изменено. Совместимость не гарантируется.

IAM-страницы, связанные в цепочки для единиц размещения

IIAM-страница имеет заголовок, отражающий первый экстент из диапазона, сопоставленного с данной IAM-страницей. IAM-страница также имеет большую битовую карту, в которой каждый бит представляет экстент. Первый бит схемы представляет первый экстент диапазона, второй бит — второй экстент и т.д. Если бит равен 0, то соответствующий ему экстент не привязан к единице размещения, которой принадлежит IAM-страница. Если он равен 1, то соответствующий ему экстент привязан к единице размещения, которой принадлежит IAM-страница.

Когда требуется вставить новую строку, но на текущей странице нет свободного места, компонент SQL Server Database Engine через IAM и PFS ищет страницу для выделения или (для страниц кучи, или текста и изображения) страницу, в которой достаточно места для хранения строки данных. Используя IAM-страницы, компонент Database Engine находит экстенты, привязанные к единице размещения. Для каждого экстента компонент Database Engine просматривает страницы PFS, чтобы определить наличие доступных страниц. Огромное число страниц данных содержатся в сравнительно небольшом числе IAM- и PFS-страниц. Поэтому обычно IAM- и PFS-страницы находятся в памяти буферного пула SQL Server, и поиск в них осуществляется очень быстро. Для индексов место вставки новой строки определяется ключом индекса. В этом случае описанный ранее процесс поиска не производится.

Компонент Database Engine размещает новый экстент для единицы размещения только в том случае, когда в существующем экстенте невозможно быстро найти страницу, в которой достаточно места для вставляемой строки. Для размещения экстентов в файловой группе компонент Database Engine пользуется пропорциональным алгоритмом размещения. Если файловая группа состоит из двух файлов и в одном из них свободного места вдвое больше, чем в другом, то во втором файле будет размещаться по одной странице на каждые две страницы во первом. Это означает, что процент заполнения для каждого из файлов в группе будет примерно одинаковым.

См. также

Основные понятия

Управление размещением экстента и свободным местом
Отслеживание измененных экстентов

Другие ресурсы

Выделение и повторное использование места на диске
sys.allocation_units (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005