Оценка размера кучи
Применимо к:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Служба аналитики Azure Synapse
Аналитическая платформенная система (PDW)
База данных SQL в Microsoft Fabric
Для оценки размера пространства, требуемого для хранения данных в куче, можно использовать следующую процедуру.
Укажите количество строк в новой таблице:
Num_Rows = число строк в таблице.
Укажите количество столбцов с фиксированной и изменяемой длиной, а также рассчитайте необходимый размер места для их хранения.
Вычислите размер, занимаемый каждой из этих групп столбцов в строке данных. Размер столбца зависит от типа данных и длины.
Num_Cols = общее количество столбцов (фиксированной и переменной ширины).
Fixed_Data_Size = общий размер в байтах всех столбцов фиксированной длины.
Num_Variable_Cols = количество столбцов переменной длины.
Max_Var_Size = максимальный общий размер в байтах всех столбцов переменной длины
Часть строки, известная как нулевая битовая карта, зарезервирована для управления возможностью столбца принимать значение NULL. Вычислите ее размер.
Null_Bitmap = 2 + ((Num_Cols + 7) / 8)
Следует использовать только целую часть этого выражения. Отбросьте остаток.
Расчет размера данных с переменной длиной:
Если таблица содержит столбцы с переменной длиной, определите, сколько пространства потребуется для хранения столбцов в строке:
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.
Вычислите общий размер строк:
Row_Size = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap + 4
Значение 4 в формуле — это накладные расходы заголовка строки данных.
Расчет количества строк на странице (8 096 свободных байт на страницу):
Rows_Per_Page = 8096 / (Row_Size + 2)
Так как строки не могут разрываться на разные страницы, общее количество строк на страницу необходимо округлить в меньшую сторону до целого количества строк. Значение 2 в формуле соответствует записи строки в массиве слотов страницы.
Вычислите количество страниц, необходимое для хранения всех строк:
Кол-во_страниц = Кол-во_строк / Строк_на_страницу
Вычисленное количество страниц должно быть округлено в большую сторону до ближайшей целой страницы.
Вычислите размер пространства, требуемого для хранения данных в куче (всего 8192 на страницу):
Размер кучи (в байтах) = 8192 x Num_Pages
Этот расчет не учитывает следующие факторы.
Секционирование
Накладные расходы на пространство при секционировании минимальны, но их расчет сложен. Он не столь важен, чтобы включать в расчеты.
Страницы распределения
Предусмотрена по меньшей мере одна IAM-страница, используемая для отслеживания страниц, выделенных куче, но размер служебных данных минимален, и алгоритма точного детерминированного вычисления количества используемых IAM-страниц не существует.
Значения больших объектов (LOB)
Алгоритм точного определения места, используемого для хранения значений данных типа LOB varchar(max), varbinary(max), nvarchar(max), text, ntextxmlи image сложен. Достаточно просто прибавить ожидаемую среднюю величину значений LOB к общему размеру кучи.
Сжатие
Размер сжатой кучи нельзя вычислить заранее.
Разреженные столбцы
Сведения о требованиях разреженных столбцов к месту на диске см. в разделе Use Sparse Columns.
См. также
Кучи (таблицы без кластеризованных индексов)
Описание кластеризованных и некластеризованных индексов
Создание кластеризованных индексов
Создание некластеризованных индексов
Оценка размера таблицы
Оценка размера кластеризованного индекса
Оценка размера некластеризованного индекса
Оценка размера базы данных