SQL Server 2016 представляет функцию оперативной аналитики в реальном времени, которая позволяет выполнять как транзакционные/оперативные, так и аналитические нагрузки на одной и той же системе – без необходимости использования отдельной аналитической системы для отчетности. Одной из ключевых функций, позволяющих это сделать, является отфильтрованный некластеризованный индекс столбцового хранилища.
Отфильтрованный некластеризованный индекс столбцового хранилища – это мощный инструмент для улучшения производительности в сценариях, где присутствует смесь горячих и теплых данных. Создавая некластеризованный индекс столбцового хранилища с отфильтрованным условием, вы можете оптимизировать доступ к теплым данным для аналитических запросов, сохраняя при этом эффективный доступ к горячим данным для оперативных нагрузок.
Вот пример создания отфильтрованного некластеризованного индекса столбцового хранилища:
CREATE NONCLUSTERED COLUMNSTORE INDEX [NCCS_OrderHeaderWithRowStoreClusteredIndexAndNonClusteredColumnStoreIndex_All] ON OrderHeaderWithRowStoreClusteredIndexAndNonClusteredColumnStoreIndex (AccountKey, CustomerName, PurchasePrice, OrderStatus) WHERE OrderStatus = 5 -- 5 => 'Order Received'
Оптимизатор SQL Server будет рассматривать, но не всегда выбирать, некластеризованный индекс столбцового хранилища для выполнения аналитических запросов. Когда оптимизатор запросов выбирает отфильтрованный некластеризованный индекс столбцового хранилища, он автоматически объединяет строки из индекса столбцового хранилища и строки, которые не соответствуют отфильтрованному условию, для предоставления аналитики в реальном времени.
Существуют несколько соображений и лучших практик для улучшения производительности с использованием отфильтрованного некластеризованного индекса столбцового хранилища:
- Для минимизации накладных расходов на поддержку некластеризованного индекса столбцового хранилища для оперативных нагрузок можно использовать отфильтрованное условие для создания некластеризованного индекса столбцового хранилища только на теплых или медленно изменяющихся данных.
- Отфильтрованный индекс столбцового хранилища поддерживается только на таблицах, хранящихся на диске, и не поддерживается на таблицах, хранящихся в памяти.
- Наличие кластеризованного индекса B-Tree на столбцах, используемых в отфильтрованном условии, позволяет эффективно идентифицировать “горячие” строки.
В ситуациях, когда невозможно классифицировать данные на основе условия фильтра, SQL Server 2016 предоставляет опцию, называемую задержкой сжатия. Задержка сжатия позволяет классифицировать данные на основе времени, помещая строки сначала в хранилище дельт, а затем перемещая их в индексы столбцового хранилища после истечения задержки сжатия. Это помогает в ситуациях, когда у вас нет предиката фильтрации для различения между теплыми и горячими данными, а также помогает минимизировать фрагментацию столбцового хранилища.
SQL Server 2016 также представляет возможность комбинировать таблицы, хранящиеся в памяти, с индексами столбцового хранилища для экстремальной OLTP и аналитики в памяти. Создавая индекс столбцового хранилища поверх таблицы, хранящейся в памяти, вы можете выполнять оперативную аналитику в реальном времени без изменений в оперативной нагрузке.
Кроме того, вы можете перенести выполнение аналитических запросов на доступную для чтения вторичную реплику в конфигурации AlwaysOn, минимизируя влияние на производительность оперативной нагрузки.
В заключение, отфильтрованный некластеризованный индекс столбцового хранилища – это мощная функция в SQL Server 2016, которая позволяет улучшить производительность, оптимизируя доступ к теплым данным для аналитических запросов, сохраняя при этом эффективный доступ к горячим данным для оперативных нагрузок. Используя эту функцию, вы можете достичь оперативной аналитики в реальном времени без необходимости использования отдельных аналитических систем.