Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по дефрагментации columnstore index?  [new]
senn
Member

Откуда:
Сообщений: 403
Есть следующая проблема:
Вью sys.dm_db_column_store_row_group_physical_stats показывает 32% фрагментации одного колоночного индекса. Вычисляю это так:
по группам:
fragmentation = 100*(ISNULL(deleted_rows,0))/total_rows

суммируя все группы:
fragmentation = CAST(100*(SUM(ISNULL(deleted_rows, 0))) AS DECIMAL(36,4))/SUM(total_rows)

Я пытаюсь дефрагментировать его, как советует msdn,т.е.:
сначала:
ALTER INDEX BESTAND_CCI ON DWH.DWH_F.BESTAND REORGANIZE WITH (COMPRESS_ALL_ROW_GROUPS = ON); 

потом его же, но без COMPRESS_ALL_ROW_GROUPS = ON
ALTER INDEX BESTAND_CCI ON DWH.DWH_F.BESTAND REORGANIZE;

с другими индексами это работало, а с этим нет. Фрагментация остается на том же уровне, в лучшем случае уменьшается на 2-3%, а с каждой неделей растет. Началось все с 20%, сейчас уже 35%.

Вопрос к общественности, что не так делаю: вычисляю фракментацию не так, дефрагментирую не так, или вообще все?

Спасибо!
20 мар 19, 16:44    [21838721]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
senn,

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2016/03/07/columnstore-index-defragmentation-using-reorganize-command/
20 мар 19, 17:59    [21838814]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
senn
Member

Откуда:
Сообщений: 403
komrad,

я этот линк уже читал раньше, большой разницы с мсдн не увидел.

Да, забыл добавить:

Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64)
Jul 21 2018 07:47:45
Copyright (C) 2017 Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)

К сообщению приложен файл. Размер - 141Kb
20 мар 19, 18:21    [21838840]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
senn
Member

Откуда:
Сообщений: 403
на скриншоте видно, что около половины групп (всего их 37) довольно сильно фрагментированы (сумарная фрагментация ~35
%).
20 мар 19, 18:28    [21838846]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
senn,
у вас на картинке у всех групп trim_reason = DICTIONARY_SIZE

" Dictionary size grew too big to compress all of the rows together."

попробуйте в качестве пробы сделать ALTER INDEX REBUILD
20 мар 19, 18:40    [21838855]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
senn,

в идеале в columnstore не должны производиться какие-либо изменения. Наименьшей проблемой является добавление записей, но, из обзоров следует, что дельта-записи могут снижать производительности и желательно перед использованием таблицы производить реорганизацию для перемещения дельты в основной массив данных. Т.е. для типового сценария использовать такие таблицы нежелательно. Более подходящий вариант - редкое и периодическое обновление, раз в неделю или месяц.
Во избежание полного перестроения индекса придуман дельта-механизм, но злоупотреблять этим не следует.
21 мар 19, 12:41    [21839447]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
Владислав Колосов
senn,

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


в дельтастор записи попадают если их кол-во (insert batch size) меньше 102400 (минимальный размер row group)
из доп. прелестей полное логирование и отсутствие компрессии (данные не сжаты)
при удалении записей в дельтасторе, они реально удаляются, а не помечаются как удаленные в случае compressed row groups
так что, если заливать данные, то порциями кратными 102400 или вообще по 1048576 записей

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/columnstore-indexes-data-loading-guidance
If the batch size is >= 102400, the rows are directly into the compressed rowgroups. It is recommended that you choose a batch size >=102400 for efficient bulk import because you can avoid moving data rows to a delta rowgroups before the rows are eventually moved to compressed rowgroups by a background thread, Tuple mover (TM).
If the batch size < 102,400 or if the remaining rows are < 102,400, the rows are loaded into delta rowgroups.


дельта-механизм придуман для аккумулирования новых данных перед сжатием
нет смысла жать 10-100 записей
21 мар 19, 13:28    [21839524]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7403
komrad,

полагаю, что основное применение колоночного индекса все же не сжатие, а быстрый расчет агрегированных значений. Для сжатия существуют и отдельные механизмы.
21 мар 19, 16:37    [21839850]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
senn
Member

Откуда:
Сообщений: 403
komrad, Владислав Колосов

спасибо большое!
Есть на чем думать. Внутренний механизм columnstore, представляю очень приблизительно, поэтому оценить то, что показывает вью, кроме расчета фрагментации из мсдн, мне трудно.
21 мар 19, 16:48    [21839860]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по дефрагментации columnstore index?  [new]
komrad
Member

Откуда: Msk -> Utrecht
Сообщений: 5162
Владислав Колосов
komrad,

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


сжатие есть один из механизмов достижения быстроты, так же как и "Batch mode execution"

https://docs.microsoft.com/en-us/sql/relational-databases/indexes/columnstore-indexes-overview?view=sql-server-2017#benefits
https://docs.microsoft.com/en-us/sql/relational-databases/indexes/columnstore-indexes-overview?view=sql-server-2017#when-should-i-use-a-columnstore-index
21 мар 19, 17:02    [21839879]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить