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


Оценка размера кучи

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure базе данных SQL Azure Synapse Analytics Analytics Platform System (PDW) в Microsoft Fabric

Для оценки размера пространства, требуемого для хранения данных в куче, можно использовать следующую процедуру.

  1. Укажите количество строк в новой таблице:

    Num_Rows = число строк в таблице.

  2. Укажите количество столбцов с фиксированной и изменяемой длиной, а также рассчитайте необходимый размер места для их хранения.

    Вычислите размер, занимаемый каждой из этих групп столбцов в строке данных. Размер столбца зависит от типа данных и длины.

    Num_Cols = общее количество столбцов (фиксированной и переменной ширины).

    Fixed_Data_Size = общий размер в байтах всех ключевых столбцов фиксированной ширины.

    Num_Variable_Cols = количество включенных столбцов переменной ширины.

    Max_Var_Size = максимальный общий размер в байтах всех столбцов переменной длины

  3. Часть строки, называемая битовой картой NULL, зарезервирована для управления свойством столбца принимать значение NULL. Вычислите ее размер.

    Null_Bitmap = 2 + ((Num_Cols + 7) / 8)

    Следует использовать только целую часть этого выражения и Остаток должен быть отброшен.

  4. Расчет размера данных с переменной длиной:

    Если таблица содержит столбцы с переменной длиной, определите, сколько пространства потребуется для хранения столбцов в строке:

    Variable_Data_Size = 2 + (Num_Variable_Cols x 2) + Max_Var_Size

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

    Примечание.

    Можно сочетать столбцы varchar, nvarchar, varbinaryили sql_variant , в результате чего общая ширина определенной таблицы превысит 8 060 байт. Длина каждого из этих столбцов должна быть в пределах 8000 байт для столбцов типа varchar, nvarchar, varbinary или sql_variant. Тем не менее их общая ширина в таблице может превышать предел в 8 060 байт.

    Если в таблице нет столбцов переменной ширины, присвойте параметру Variable_Data_Size значение 0.

  5. Вычислите общий размер строк:

    Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4

    Значение 4 в формуле — это служебные данные заголовка строки данных.

  6. Расчет количества строк на странице (8 096 свободных байт на страницу):

    Rows_Per_Page = 8096 / (Row_Size + 2)

    Так как строки не могут разрываться на разные страницы, общее количество строк на страницу необходимо округлить до меньшего целого значения целой строки. Значение 2 в формуле соответствует записи строки в массиве областей памяти страницы.

  7. Вычислите количество страниц, необходимое для хранения всех строк:

    Num_Pages = Num_Rows / Rows_Per_Page

    Вычисленное количество страниц должно быть округлено в большую сторону до ближайшей целой страницы.

  8. Вычислите размер пространства, требуемого для хранения данных в куче (всего 8192 на страницу):

    Размер кучи (в байтах) = 8192 x Num_Pages

Этот расчет не учитывает следующие факторы.

  • Секционирование

    Размер служебных данных секционирования минимален, но его сложно рассчитать. Он не столь важен, чтобы включать в расчеты.

  • Страницы размещения

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

  • Значения LOB

    Алгоритм точного определения места, используемого для хранения значений данных типа LOB varchar(max), varbinary(max), nvarchar(max), text, ntextxmlи image сложен. Достаточно просто прибавить ожидаемую среднюю величину значений LOB к общему размеру кучи.

  • Сжатие

    Размер сжатой кучи нельзя вычислить заранее.

  • Разреженные столбцы

    Сведения о требованиях разреженных столбцов к месту на диске см. в разделе Use Sparse Columns.

См. также

Кучи (таблицы без кластеризованных индексов)
Описание кластеризованных и некластеризованных индексов
Создание кластеризованных индексов
Создание некластеризованных индексов
Оценка размера таблицы
Оценка размера кластеризованного индекса
Оценка размера некластеризованного индекса
Оценка размера базы данных