ADG Оставить заявку
Блог Данные и аналитика 4 мин чтения

SQL Server 2016 SP1: Columnstore в Standard Edition и что это меняет на практике

SP1 открывает Columnstore Index, In-Memory OLTP и Row-Level Security в Standard Edition. Перестраиваем отчётные витрины клиентам, которые не тянут Enterprise-лицензии.

Контекст момента

SQL Server 2016 SP1 вышел в ноябре 2016 года, перенеся Columnstore Index, In-Memory OLTP и Row-Level Security во все редакции, включая Standard и Express

SP1 для SQL Server 2016 анонсирован - выход ожидается в ноябре. Новость прилетела на конференции PASS Summit, и главное в ней не набор патчей, а одно решение: Columnstore Index, In-Memory OLTP и Row-Level Security переезжают во все редакции. Standard, Express, даже Web Edition.

Раньше Columnstore Index в Enterprise стоил, грубо говоря, денег на другом уровне. Теперь это меняется.

Что именно переходит в Standard

Если без воды - три вещи, которые до SP1 были строго Enterprise:

  • Columnstore Index (и clustered, и non-clustered) - колоночное хранение данных для аналитических запросов. На агрегациях по большим объёмам даёт прирост скорости на порядки по сравнению с row-store.
  • In-Memory OLTP (Hekaton) - таблицы в памяти с lock-free механикой для высоконагруженных OLTP-сценариев. В Standard будет лимит на объём памяти под In-Memory таблицы, но базовая функциональность открывается.
  • Row-Level Security - политики безопасности на уровне строк прямо в движке, без логики в приложении. Для мультитенантных схем и строгого разграничения доступа к данным.

Лимиты у Standard Edition остаются: 128 ГБ RAM, 4 сокета / 24 ядра. Но для большинства задач среднего бизнеса, которые к нам приходят, это не потолок.

Почему это важно для клиентов

Нас интересует Columnstore - и конкретная ситуация, которая у нас сейчас открывается.

Есть клиенты, у которых SQL Server Standard стоит давно. Аналитические отчёты работают на обычных row-store таблицах - это значит, что тяжёлый запрос с агрегацией за квартал по миллионам строк честно прочитывает всю таблицу, строка за строкой. Медленно. Заказчик это чувствует, особенно когда отчёт нужен к утреннему совещанию, а генерируется полчаса.

До SP1 разговор был предсказуемый: «хотите быстрее - нужен Enterprise». Enterprise стоит в разы дороже Standard. Для компании с тремя-четырьмя SQL Server-инсталляциями это разговор о серьёзных деньгах, и часто заказчик просто мирился со скоростью.

Теперь у нас появляется другой разговор. Columnstore Index можно добавить к существующей таблице, не меняя структуру данных целиком - non-clustered columnstore index создаётся поверх row-store таблицы. Аналитические запросы начинают использовать его автоматически, через оптимизатор.

Что конкретно планируем переделать

Мы смотрим на несколько отчётных витрин, которые сейчас работают на Standard Edition и имеют характерный профиль: ETL загружает данные ночью, днём идут тяжёлые SELECT с агрегациями, запросы на изменение данных - редкость.

Это почти идеальный сценарий для Columnstore: данные относительно статичные (мало DML), читаются аналитически (агрегации, GROUP BY, широкие диапазоны дат).

Что будем делать после выхода SP1:

  • Добавить non-clustered columnstore index на ключевые fact-таблицы. Это не потребует переписывать ETL или менять схему - просто CREATE COLUMNSTORE INDEX.
  • Проверить планы запросов - убедиться что оптимизатор действительно идёт через columnstore, а не игнорирует индекс. SET SHOWPLAN_XML / фактический план выполнения в SSMS в помощь.
  • Сравнить реальное время до и после на репрезентативных запросах. Без цифр - не считается.
  • Посмотреть на сжатие - columnstore-хранение сжимает данные агрессивнее row-store, это влияет на размер файлов данных и на I/O.

Витрины, где идёт активный OLTP поверх тех же таблиц, трогать аккуратнее: columnstore и активный DML - не лучшие друзья, хотя в SQL Server 2016 это стало лучше чем в 2014. Там смотрим отдельно.

Про In-Memory OLTP и Row-Level Security

In-Memory OLTP в Standard открывается с ограничением на объём памяти под in-memory таблицы - цифра пока не финализирована Microsoft до GA SP1. Для наших клиентов это скорее инструмент для очень специфичных горячих таблиц (очереди, счётчики, сессионные данные), а не для массового переезда. Смотрим, но не торопимся.

Row-Level Security - полезная вещь для тех, у кого в одной базе живут данные нескольких организаций или подразделений и нужна гарантия изоляции на уровне движка, не на уровне WHERE в приложении. У нас есть один такой клиент, где это будет уместно. Обсудим после SP1.

Где сейчас

SP1 ещё не вышел - ждём ноября. Но уже сейчас стоит проинвентаризировать: какие инсталляции на Standard, какие там отчётные запросы, и где Columnstore даст реальный эффект. Переговоры с заказчиком по апгрейду до Enterprise - это длинный процесс согласования бюджета. Апгрейд схемы с добавлением нескольких индексов - это другой разговор.

Для DWH и BI-проектов SP1 - это нечастое событие: фича уровня Enterprise приходит в Standard без доплаты. Грех не использовать.

Контакт

Нужна такая же инженерная работа?

Опишите задачу и контекст. Ответим в течение рабочего дня, при необходимости подпишем NDA.