DWH-ETL-OLAP
August 23, 2019

DWH: Clustered Columnstore Index

  1. Масса статей здесь: Stairway to ColumnStore Indexes
  2. Вьюшка по статистике индекса:
SELECT     OBJECT_NAME(rg.object_id)   AS TableName,
i.name                      AS IndexName,
i.type_desc                 AS IndexType,
rg.partition_number,
rg.row_group_id,
rg.total_rows,
rg.size_in_bytes,
rg.deleted_rows,
rg.[state],
rg.state_description
FROM       sys.column_store_row_groups AS rg
INNER JOIN sys.indexes                 AS i
ON   i.object_id                  = rg.object_id
AND  i.index_id                   = rg.index_id
WHERE      i.name = N'IX_CL_CST_dboSales'
ORDER BY   TableName, IndexName,
rg.partition_number, rg.row_group_id;

3. Статья по оптимизации загрузки напрямую в CCI, к примеру из SSIS. К примеру если стейджинг в CCI. К примеру если ХД по технологии DataVault или 6НФ, в этом случае удобно делать быстрые выборки по колонкам из стейджинга.

В целом, при традиционной схеме ЕТЛ, быстрее всего происходит вставка в heap-стайджинг. В случае CCI-стейджинга, при настройках из данного пункта, получаем 1,5 кратный прирост продолжительности вставки.

4. Ну и MSDN: Columnstore indexes - Data loading guidance

П.с. по пп. 3 и 4, при загрузке в CCI из SSIS в компоненте "OLE DB Destination" блокировка таблицы не нужна, достаточно установить "быструю загрузку в таблицу". В этом случае идет BULK INSERT, и группы строк блокируются на монопольный доступ автоматом.
При INSERT INTO ... SELECT FROM... наоборот нужен хинт WITH (TABLOCKX), который устанавливает массовую многопоточную вставку для инструкции INSERT с минимальным логированием и блокировками.

5.