Какова анатомия индекса columnstore?


20

Одна из новых функций в SQL Server 2012 под кодовым названием Denali- индекс Columnstore.

Я хорошо знаком с обычными старыми индексами хранилища строк, такими как структура b-дерева, различия в хранении между листовым уровнем и страницами b-дерева, влияние включенных полей, оптимизация их использования, порядок ключей и т. Д.

У меня возникают трудности с получением какой-либо хорошей информации о внутреннем компоненте индекса columnstore.

  • Как это структурировано?
  • Есть ли B-дерево? Какая-то другая структура на месте?
  • Как организованы данные?
  • Какие конкретные операторы лучше всего подходят для его использования?
  • Какие-либо другие анти-паттерны следует избегать при их использовании?

Многое из того, что я могу узнать о них, в основном является полной противоположностью «нормального» индекса, то есть без упорядочения ключей, без включенных полей, ТОЛЬКО некластеризованных.

Любые идеи приветствуются.


На странице Википедии довольно много поклонников технических реализаций баз данных хранилищ столбцов. Я представляю, что индекс - это просто структура данных хранилища столбцов для одного столбца вместе с его ключами. Может быть, он использует растровый индекс, может быть, BTree.
ConcernedOfTunbridgeWells

Это на самом деле для нескольких столбцов. Также я предполагаю, что с другими реализациями SS это будет немного отличаться от других продуктов
JNK

Для MySQL, но то же самое относится: developer.bazaarvoice.com/why-columns-are-cool Кроме того, Sybase IQ - внучка
gbn

3
@ConcernedOfTunbridgeWells - используют ли индексы columnstore растровые индексы? Нет. В индексах Columnstore используется собственное представление данных на основе Vertipaq. Это не то же самое, что индекс растрового изображения и не использует его. Но он имеет некоторые аналогичные преимущества для растровых индексов, например, сокращение времени, необходимого для фильтрации столбца с небольшим количеством различных значений.
Мартин Смит

1
Ремус Русану, член команды Microsoft, которая разработала эту функцию, только что опубликовал статью на эту тему: Внутри индексов COLUMNSTORE в SQL Server 2012
Ник Чаммас,

Ответы:


22

Структура Columnstore

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

Словари закрепляются в памяти во время выполнения запроса, при этом идентификаторы значений данных из сегмента просматриваются в словаре всякий раз, когда для выполнения требуется фактическое значение данных (этот поиск откладывается на максимально возможное время из соображений производительности).

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

Конкретные операторы плана

SQL Server 2012 представляет новый режим выполнения, называемый пакетным режимом. В этом режиме пакеты из примерно 1000 строк передаются между операторами, что значительно повышает эффективность использования процессора. Внутри каждого пакета столбчатые данные представлены в виде вектора. Не все операторы плана поддерживают работу в пакетном режиме, но примеры таких, которые включают сканирование индекса Columnstore, внутреннее объединение хэша, построение таблицы хеша, растровый фильтр, агрегирование хэша (не скалярные агрегаты), фильтр и вычисление скаляров (для проекции и выражения) оценка). Планы выполнения запросов были улучшены, чтобы показать приблизительный и фактический режим выполнения.

Антишаблоны

В первом выпуске существует большое количество ограничений, включая ограничения на допустимые типы данных . Поддерживаются наиболее распространенные типы; неподдерживаемые типы данных включают в себя DECIMALс точностью выше , чем 18 цифр, (N)VARCHAR(MAX), UNIQUEIDENTIFIER, типы CLR, и (VAR)BINARY.

Использование строковых типов , OUTER JOIN, IN,EXISTS , NOT IN, OR, UNION ALLможет привести к значительному снижению производительности (Ряд выполнения режима), если обходные не используется , что , как правило , включают необычные синтаксические перезаписи , как показано в связанных статьях в данном разделе.

Дополнительная информация

Ремус Ruşanu имеет в блоге отличный обзор здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.