Одна из новых функций в SQL Server 2012 под кодовым названием Denali
- индекс Columnstore.
Я хорошо знаком с обычными старыми индексами хранилища строк, такими как структура b-дерева, различия в хранении между листовым уровнем и страницами b-дерева, влияние включенных полей, оптимизация их использования, порядок ключей и т. Д.
У меня возникают трудности с получением какой-либо хорошей информации о внутреннем компоненте индекса columnstore.
- Как это структурировано?
- Есть ли B-дерево? Какая-то другая структура на месте?
- Как организованы данные?
- Какие конкретные операторы лучше всего подходят для его использования?
- Какие-либо другие анти-паттерны следует избегать при их использовании?
Многое из того, что я могу узнать о них, в основном является полной противоположностью «нормального» индекса, то есть без упорядочения ключей, без включенных полей, ТОЛЬКО некластеризованных.
Любые идеи приветствуются.
Ответы:
Структура 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 имеет в блоге отличный обзор здесь .
источник