SSAS
May 25, 2024

Как влияет размер секций и сегментов на модель данных

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

Каждая секция содержит по крайней мере один сегмент данных. По умолчанию сегмент данных может содержать 8 388 608 (8*1024*1024) строк. Это значение регулируется свойством VertiPaq DefaultSegmentRowCount.

Ниже выжимка о влиянии размеров секций и сегментов на модель данных.

Процессинг

• Разбиение на секции полезно для скорости обработки, они могут вычисляться параллельно.
• Чем больше сегмент, тем лучше сжатие.
VertiPaq может добиться более высокого уровня сжатия, анализируя большее количество строк за один этап сжатия. НО: чем больше сегмент, тем медленнее выполняется обработка.
В таблицах очень большого размера важно тестировать сегменты разного размера и измерять объем памяти для достижения оптимального сжатия
• Секция не обрабатывается целиком. SSAS считывает ее по сегментам во время обработки. Когда сегмент прочитан полностью, движок начинает сжимать его и одновременно считывает следующий сегмент.
• Сегменты не могут превышать размер секции. Если в модели есть схема секционирования, которая создает секции всего из 1 000 000 строк, то все сегменты будут меньше 1 000 000 строк (а именно, они будут соответствовать размеру секции). Чрезмерное разбиение таблиц на секции - очень распространенная ошибка начинающих пользователей VertiPaq. Помните, что создание слишком большого количества небольших разделов может снизить производительность.
• Словарь является глобальным для таблицы, размер в битах может быть дополнительно уменьшен на уровне сегмента. Порядок сортировки секции может быть важен в больших таблицах для уменьшения количества различных значений в сегменте. Для оптимального сжатия значения, используемые в секции, должны быть смежными в словаре, если столбец имеет хэш-кодировку. Параллельная обработка нескольких секций может повлиять на этот оптимальный результат.

Вычисление

• Сегменты используются для параллелизма движком VertiPaq
по одному ядру на сегмент при сканировании столбца
• Если сегменты слишком малы, то параллелизм во время запроса увеличивается. Это не всегда хорошо. Хотя сканирование столбца выполняется быстрее, VertiPaq требуется больше времени в конце сканирования, чтобы объединить частичные результаты, которые вычисляются разными потоками.
Если секция слишком мала, то время, необходимое для управления переключением задач и окончательной агрегацией, превышает время, необходимое для сканирования данных, что отрицательно сказывается на общей производительности запросов
• Разбиение на секции не повышает производительность запросов. Секции не дают преимуществ во время запроса, а очень большое количество секций (100 или более) может быть контрпродуктивным. Во время запросов учитываются все разделы. VertiPaq не может игнорировать секцию на основе ее метаданных

Вывод

Количество объектов секционирования в модели не ограничено. Однако каждая секция содержит по крайней мере один сегмент данных с объемом памяти. Слишком большое количество небольших секций может привести к слишком большому объему небольших сегментов. Это может негативно повлиять на производительность запросов, так как подсистеме хранилища приходится сканировать чрезмерное количество сегментов. Скорость операций с метаданными в слишком большом количестве секций может отрицательно повлиять на обработку ресурсов.

Создайте минимальное количество секций, при этом эффективно выполняя свои цели секционирования.

Источники

Tabular modeling in Microsoft SQL Server Analysis Services (M. Russo, A. Ferrari)

learn.microsoft.com

https://www.purplefrogsystems.com/2013/12/ssas-tabular-performance-defaultsegmentrowcount/