Поделиться через


Что нового в колонно-ориентированных индексах

Применимо:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема аналитических платформ (PDW)SQL база данных в Microsoft Fabric

Узнайте, какие функции columnstore доступны для каждой версии SQL Server, а также последние версии Azure SQL Database, Azure Synapse Analytics и Analytics Platform System (PDW).

Сводка функций для релизов продукта

В следующей таблице перечислены основные функции для индексов columnstore и продукты, в которых они доступны.

Функция индекса Columnstore SQL Server 2012 (11.x) SQL Server 2014 (12.x) SQL Server 2016 (13.x)1 SQL Server 2017 (14.x) SQL Server 2019 (15.x) SQL Server 2022 (16.x) База данных Azure SQL2 и Управляемый экземпляр Azure SQLAUTD Выделенный пул SQL для Azure Synapse Analytics
Выполнение пакетного режима для многопоточных запросов3 да да да да да да да да
Пакетный режим выполнения для однопоточных запросов да да да да да да
Опция сжатия архивации да да да да да да да
Изоляция моментальных снимков и изоляция с фиксированным чтением моментальных снимков. да да да да да да
Указать индекс columnstore при создании таблицы да да да да да да
Always On поддерживает колонночные индексы да да да да да да да да
Читаемая вторичная реплика Always On поддерживает некластеризованные столбчатые индексы только для чтения. да да да да да да да да
Вторичная читаемая реплика Always On поддерживает обновляемые индексы columnstore да да да да
Некластеризованный индекс columnstore только для чтения в heap или B-дереве да да Да 4 Да 4 Да 4 Да 4 Да 4 Да 4
Обновляемый некластеризованный столбчатый индекс в куче или в B-дереве да да да да да да
Дополнительные индексы B-дерева разрешены в куче или B-дереве, которое имеет некластеризованный индекс столбцового хранилища. да да да да да да да да
Обновляемый кластеризованный колонночный индекс да да да да да да да
Индекс B-дерева в кластеризованном хранилище столбцов да да да да да да
Индекс columnstore в таблице, оптимизированной для памяти да да да да да да
Определение некластеризованного индекса columnstore поддерживает использование отфильтрованных условий да да да да да да
Опция задержки сжатия для колоночных индексов в CREATE TABLE и ALTER TABLE да да да да да да
Поддержка типа nvarchar(max) да да да да нет 5
Индекс columnstore может содержать нематериализованный вычисляемый столбец да да да
Поддержка перемещения кортежей с слиянием в фоновом режиме да да да да
Упорядоченные кластерные columnstore-индексы да да да
Упорядоченные индексы колонночного хранилища данных без кластеров да
Создание и перестроение индекса columnstore в Интернете да да
Создание и перестроение индексированного columnstore в режиме онлайн да

1 Для SQL Server 2016 (13.x) с пакетом обновления 1 (SP1) и для более поздних версий колоночные индексы доступны во всех редакциях. Для SQL Server 2016 (13.x) (до sp1) и более ранних версий индексы columnstore доступны только в Выпуске Enterprise.
2 В SQL Azure индексы columnstore доступны на уровнях DTU Premium, DTU Standard — S3 и выше, а также на всех уровнях виртуальных ядер. 3 Степень параллелизма (DOP) для пакетного режима операций ограничена 2 для SQL Server Standard Edition и 1 для SQL Server Web и Express Editions. Это ограничение относится к индексам columnstore, созданным на основе дисковых таблиц и оптимизированных для памяти таблиц.
4 Чтобы создать некластеризованный columnstore индекс только для чтения, разместите индекс в файловой группе, доступной только для чтения.
5 не поддерживается в выделенных пулах SQL, но поддерживается в бессерверном пуле SQL.
AUTD применяется к управляемому экземпляру SQL Azure, настроенного с помощью политики обновления Always-up-to-date.

SQL Server 2022 (16.x)

В SQL Server 2022 (16.x) добавлены следующие функции:

  • Упорядоченные кластеризованные индексы columnstore повышают производительность запросов на основе упорядоченных предикатов столбцов. Упорядоченные индексы columnstore могут повысить производительность, пропуская сегменты данных в целом. Это может значительно сократить объем операций ввода-вывода, необходимых для выполнения запросов к данным columnstore. Дополнительные сведения см. в разделе удаление сегмента. Дополнительные сведения см. в разделах CREATE COLUMNSTORE INDEX и Настройка производительности с упорядоченными columnstore индексами.
  • Предикат pushdown с кластеризованной группой строк columnstore для устранения строк использует значения границ для оптимизации поиска строк. Все индексы columnstore получают преимущество от расширенного исключения сегментов по типу данных. Начиная с SQL Server 2022 (16.x), эти возможности устранения сегментов расширяются до типов данных string, binary и GUID, а datetimeoffset для масштабирования больше двух. Ранее исключение сегмента columnstore применялось только к числовым, датовым и временным типам данных, а также к типу данных datetimeoffset с масштабом меньше или равно двум. После обновления до версии SQL Server, которая поддерживает исключение сегмента строки min/max (SQL Server 2022 (16.x) и более поздние версии), columnstore-индекс не будет использовать эту функцию, пока он не будет перестроен с помощью ALTER INDEX REBUILD или CREATE INDEX WITH (DROP_EXISTING = ON).
  • Исключение групп строк в columnstore для префикса предикатов LIKE (например, column LIKE 'string%'). Исключение сегментов не поддерживается для использования, не являющегося префиксом, LIKE, например, column LIKE '%string'.
  • Дополнительные сведения о добавленных функциях см. в статье "Новые возможности SQL Server 2022".

SQL Server 2019 (15.x)

SQL Server 2019 (15.x) добавляет следующие новые возможности:

Функциональный

Начиная с SQL Server 2019 (15.x), модулю перемещения кортежей помогает фоновая задача слияния, которая автоматически сжимает небольшие ОТКРЫТЫЕ дельта-группы строк, которые существуют уже некоторое время в соответствии с внутренним порогом, или объединяет СЖАТЫЕ группы строк, из которых было удалено большое количество строк. Ранее операция реорганизации индекса требовалась для объединения групп строк с частично удаленными данными. Это со временем повышает качество индекса columnstore.

SQL Server 2017 (14.x)

SQL Server 2017 (14.x) добавляет эти новые функции.

Функциональный

  • SQL Server 2017 (14.x) поддерживает неперсистированные вычисляемые столбцы в кластеризованных индексах columnstore. В кластеризованных индексах columnstore не поддерживаются материализованные вычисляемые столбцы. Невозможно создать некластеризованный индекс columnstore в вычисляемом столбце.

SQL Server 2016 (13.x)

SQL Server 2016 (13.x) добавляет ключевые улучшения для повышения производительности и гибкости индексов columnstore. Эти улучшения расширяют возможности хранения данных и обеспечивают поддержку операционной аналитики в реальном времени.

Функциональный

  • В таблице типа rowstore может быть один обновляемый некластеризованный индекс типа columnstore. Ранее некластеризованный индекс columnstore был доступен только для чтения.

  • Определение некластеризованного индекса columnstore поддерживает использование отфильтрованных условий. Чтобы свести к минимуму негативное влияние на производительность, вызванное добавлением некластеризованного индекса columnstore для таблицы OLTP, можно использовать отфильтрованное условие для создания некластеризованного индекса columnstore только для холодных данных операционной рабочей нагрузки.

  • Таблица, хранящаяся в оперативной памяти, может иметь один колоночный индекс. Вы можете создать его одновременно с созданием таблицы или добавить позже с помощью ALTER TABLE (Transact-SQL). Ранее создание индекса columnstore допускалось только в таблицах на дисках.

  • Кластеризованный индекс columnstore может включать один или несколько некластеризованных индексов rowstore. Ранее индекс columnstore не поддерживал некластеризованные индексы. SQL Server автоматически обслуживает некластеризованные индексы для операций DML.

  • Поддержка первичных и внешних ключей с использованием индекса B-tree для соблюдения этих ограничений на кластеризованный columnstore index.

  • Индексы columnstore включают параметр задержки сжатия, который сводит к минимуму влияние транзакционной рабочей нагрузки на операционную аналитику в реальном времени. Этот параметр позволяет стабилизировать часто изменяющиеся строки, прежде чем сжать их в колонночное хранилище. Дополнительные сведения см. в статье CREATE COLUMNSTORE INDEX (Transact-SQL) и Начало работы с Columnstore для оперативной аналитики в режиме реального времени.

Производительность для уровня совместимости базы данных 120 или 130

  • Индексы columnstore поддерживают уровень изоляции моментальных снимков read committed (RCSI) и изоляцию моментальных снимков (SI). Это позволяет выполнять транзакционно согласованные аналитические запросы без блокировок.

  • Columnstore поддерживает дефрагментацию индексов с помощью удаления строк без необходимости явного перестроения индекса. Инструкция ALTER INDEX ... REORGANIZE удаляет удаленные строки (на основе внутренней политики) из индекса columnstore в оперативном режиме.

  • К индексам columnstore можно получить доступ на читаемой вторичной реплике Always On. За счет переноса запросов аналитики во вторичную реплику AlwaysOn можно повысить производительность оперативной аналитики.

  • Аггрегированное вычисление (Aggregate Pushdown) вычисляет агрегатные функции MIN, MAX, SUM, COUNT и AVG во время сканирования таблицы, если тип данных использует не более 8 байт и не относится к строковому типу данных. Понижение агрегатов поддерживается с включением или без включения предложения GROUP BY как для кластеризованных столбцовых индексов, так и для некластеризованных столбцовых индексов. В SQL Server это улучшение зарезервировано для выпуска Enterprise.

  • Продвижение строкового предиката ускоряет запросы, которые сравнивают строки типа VARCHAR/CHAR или NVARCHAR/NCHAR. Это относится к общим операторам сравнения, включая такие операторы, как LIKE, которые используют фильтры битовой карты. Это работает со всеми поддерживаемыми параметрами сортировки. В SQL Server это улучшение зарезервировано для выпуска Enterprise.

  • Улучшения для операций в пакетном режиме за счет использования векторных аппаратных возможностей. Ядро СУБД обнаруживает уровень поддержки процессора для расширений AVX 2 (расширенные векторные расширения) и SSE 4 (потоковые расширения SIMD) и использует их, если они поддерживаются. В SQL Server это улучшение зарезервировано для выпуска Enterprise.

Производительность для уровня совместимости базы данных 130

  • Поддержка нового пакетного режима для запросов с помощью любой из следующих операций:

    • SORT
    • агрегаты с несколькими четко различимыми функциями некоторые примеры: COUNT/COUNT, AVG/SUM, CHECKSUM_AGG, STDEV/STDEVP;
    • агрегатные оконные функции: COUNT, COUNT_BIG, SUM, AVG, MIN, MAX и CLR;
    • определяемые пользователем оконные агрегаты: CHECKSUM_AGG, STDEV, STDEVP, VAR, VARP и GROUPING;
    • аналитические агрегатные оконные функции: LAG, LEAD, FIRST_VALUE, LAST_VALUE, PERCENTILE_CONT, PERCENTILE_DISC, CUME_DIST и PERCENT_RANK.
  • Однопоточные запросы, выполняемые под MAXDOP 1 или с последовательным планом запроса, выполняются в пакетном режиме. Ранее только многопоточные запросы выполнялись в пакетном режиме.

  • Запросы к таблицам, оптимизированным для памяти, могут иметь параллельные планы в режиме SQL InterOp как при доступе к данным в строчном хранилище, так и в колоночном индексе.

Возможность поддержки

Следующие системные представления являются новыми для columnstore:

Следующие представления динамического управления (DMV), основанные на технологии OLTP в памяти, содержат обновления для колоночного хранилища:

Ограничения

  • Для таблиц в памяти индекс columnstore должен включать все столбцы; индекс columnstore не может включать отфильтрованное условие.
  • Для таблиц в памяти запросы к индексам columnstore выполняются только в режиме взаимодействия, а не в собственном режиме компиляции. Поддерживается параллельное выполнение.

Известные проблемы

Область применения: SQL Server, Управляемый экземпляр SQL Azure

  • В настоящее время на LOB столбцы (varbinary(max), varchar(max) и nvarchar(max)) в сжатых сегментах хранилища столбцов не затрагиваются DBCC SHRINKDATABASE и DBCC SHRINKFILE.

SQL Server 2014 (12.x)

SQL Server 2014 (12.x) представил кластеризованный индекс columnstore в качестве основного формата хранилища. Это позволило выполнять регулярные операции загрузки, а также операции обновления, удаления и вставки.

  • Таблица может использовать кластеризованный индекс columnstore в качестве основного хранилища таблиц. В таблице не разрешены другие индексы, но кластеризованный индекс columnstore можно обновить, чтобы вы могли выполнять регулярные нагрузки и вносить изменения в отдельные строки.
  • Некластеризованный индекс columnstore продолжает иметь те же функции, что и в SQL Server 2012 (11.x), за исключением дополнительных операторов, которые теперь могут выполняться в пакетном режиме. Он по-прежнему не может быть обновляемым, за исключением перестроения и переключения разделов. Некластеризованный индекс columnstore поддерживается только в таблицах на диске, но не в таблицах в памяти.
  • Кластеризованный и некластеризованный индексы колоночного хранилища данных имеют опцию архивного сжатия, которое дополнительно сжимает данные. Параметр архивации удобен для сокращения объема данных в памяти и на диске, однако он снижает производительность запросов. Его можно рекомендовать для редко используемых данных.
  • Кластеризованный и некластеризованный индексы columnstore функционируют весьма сходным образом; они используют одинаковый формат хранения по столбцам, подсистему обработки запросов и набор динамических административных представлений. Различие заключается в типе индекса (основной и дополнительный), кроме того, некластеризованный индекс columnstore доступен только для чтения.
  • Следующие операторы выполняются в пакетном режиме для многопоточных запросов: SCAN, FILTER, PROJECT, JOIN, GROUP BY и UNION ALL.

SQL Server 2012 (11.x)

SQL Server 2012 (11.x) представил некластеризованный индекс columnstore в качестве другого типа индекса для таблиц rowstore и пакетной обработки запросов к данным columnstore.

  • Таблица типа rowstore может иметь один некластеризованный индекс columnstore.
  • Индекс columnstore доступен только для чтения. После создания индекса columnstore нельзя обновлять таблицу с помощью операций INSERT, DELETE и UPDATE. Для выполнения этих операций необходимо удалить индекс, обновить таблицу и перестроить индекс columnstore. Дополнительные данные в таблицу можно загрузить с помощью переключения секций. Преимущество переключения разделов заключается в том, что вы можете загружать данные без удаления и перестроения индекса columnstore.
  • Индекс columnstore всегда требует дополнительного места для хранения, как правило, на 10 % больше по сравнению со строковым хранилищем, поскольку он хранит копию данных.
  • Пакетная обработка обеспечивает двукратное (и более) повышение производительности, но она доступна только для параллельного выполнения запросов.