КубЛаб

Обработка модели: что происходит и как часто её запускать

Режимы обработки, секции и расписание: как обновлять данные быстро и без простоя для пользователей.

Статья 2 из 2 в рубрике, 2 мин чтения

Модель SSAS хранит копию данных из хранилища. Чтобы в отчётах появились вчерашние продажи, модель нужно обработать (process) — перечитать данные и пересчитать всё, что от них зависит. От того, как настроена обработка, зависит, насколько свежие данные видят пользователи и не тормозит ли сервер днём.

Что происходит при обработке

Для табличной модели обработка состоит из двух частей:

  1. Загрузка данных — SSAS выполняет запросы к хранилищу и сжимает результат в колоночный формат.
  2. Пересчёт — строятся вычисляемые колонки и таблицы, связи и иерархии.

Пока идёт обработка, пользователи продолжают работать со старой версией данных. Новая подменяет старую одним коротким переключением в конце. Поэтому серверу нужна память и на рабочую копию, и на обрабатываемую: при полной обработке — примерно вдвое больше, чем занимает модель.

Основные режимы

Режим Что делает Когда использовать
Full Загружает данные заново и всё пересчитывает Первая загрузка, изменения в структуре модели
Data Только загружает данные, без пересчёта Обновление нескольких таблиц с последующим Recalc
Recalc Только пересчитывает зависимые объекты После серии Data
Default Обрабатывает то, что ещё не обработано Подстраховка после развёртывания
Add Добавляет новые строки в секцию Догрузка свежих фактов без перечитывания старых
Clear Очищает данные объекта Освобождение памяти, подготовка к перезагрузке

Секции: не перечитывать всё каждый раз

Таблица фактов за пять лет может занимать сотни миллионов строк. Перечитывать её целиком каждую ночь долго и бессмысленно: прошлые годы не меняются. Поэтому большую таблицу делят на секции (partitions), например по месяцам, и ежедневно обрабатывают только текущий и прошлый месяц.

Обработку обычно запускают командой на языке TMSL (для табличной модели) из задания SQL Server Agent сразу после загрузки хранилища:

{
  "refresh": {
    "type": "full",
    "objects": [
      { "database": "Sales", "table": "Продажи", "partition": "Продажи 2025-11" },
      { "database": "Sales", "table": "Продажи", "partition": "Продажи 2025-10" }
    ]
  }
}

Как часто обрабатывать

Чаще всего хватает одной обработки в сутки, ночью, после загрузки хранилища. Если бизнесу нужны данные внутри дня, есть варианты:

  • обрабатывать только текущую секцию каждый час;
  • вынести оперативные данные в отдельную таблицу в режиме DirectQuery;
  • разделить модель на «историческую» и «оперативную».

Каждый вариант добавляет нагрузку и сложность, поэтому начинаем с вопроса «насколько свежими должны быть данные на самом деле?». Часто ответ звучит как «на утро вчерашнего дня», и сложная схема не нужна.

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