Структуры кучи

Кучей является таблица без кластеризованного индекса. Для каждой кучи существует одна строка в представлении sys.partitions с index_id = 0 для каждой секции, используемой кучей. По умолчанию у кучи есть одна секция. Если куча имеет несколько секций, каждая из них имеет структуру кучи, содержащую данные для этой определенной секции. Например, если у кучи четыре секции, имеются четыре структуры кучи, по одной на каждую секцию.

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

Столбец first_iam_page в системном представлении sys.system_internals_allocation_units указывает на первую IAM-страницу в цепи IAM-страниц, управляющей выделением пространства куче в определенной секции. SQL Server использует IAM-страницы для перемещения по куче. Страницы данных и строки в этих страницах не расположены в каком-либо порядке и не связаны. Единственным логическим соединением страниц данных являются данные, записанные в IAM-страницы.

Важное примечаниеВажно!

Системное представление sys.system_internals_allocation_units зарезервировано только для внутреннего использования Microsoft SQL Server. Совместимость с будущими версиями не гарантируется.

Просмотр таблиц или последовательное считывание в куче может выполняться просмотром IAM-страниц для нахождения экстентов, хранящих страницы кучи. Так как карта IAM представляет экстенты в том же порядке, в котором они существуют в файлах данных, это означает, что последовательный просмотр кучи выполняется последовательно в каждом файле. Использование IAM-страниц для определения последовательности просмотра означает также, что строки из кучи обычно возвращаются не в том порядке, в котором они вставлялись.

На следующей иллюстрации демонстрируется, как компонент SQL Server Database Engine использует IAM-страницы для получения строк данных из кучи с одной секцией.

IAM-страницы получают данные в одну кучу секций