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

Откуда:
Сообщений: 980
Есть большая база, в ней несколько таблиц фактов по несколько десятков миллионов строк. Решил их перевести на ColumnStore. Заменил кластерные индексы на ColumnStore. В результате время выборки в некоторых запросах сократилось в 5-10 раз. Но некоторые запросы так и остались выполняться долго. Но проблема в том, что в эти таблицы ночью грузятся еще данные, а потом еще и пересчитываются. Так вот было замечено на одной таблице некоторое странное поведение. 1 - при ее пересчете Tempdb выростал в сотни раз, с 50 мб до 85 ГБ (причем сама таблица по данным SQL занимает около 15 ГБ). 2 - вставка данных существенно замедлилась.
Чтобы решить эту проблему, убил все индексы на таблицу и оставил только один ColumnStore. Производительность загрузки возросла, но некоторые запросы по выборке замедлились. Возникает такой вопрос, как использовать эти ColumnStore индексы, надо ли дополнительно стандарнтые индексы, как грузить данные, отключать все индексы или нет, как обновлять данные, снова отключать индексы или нет? В общем нужна доп информация по настройке и использовании этих индексов. Буду очень благодарен за такую информацию.
Для справки. В этой таблице - 60 млн. строк. за ночь загружается и обновляется около 300 тысяч строк. Но может и больше. Потом по этой таблице строятся итоговые таблицы с результатами от 500 тысяч до 10 млн. строк путем выборки из главной таблицы и сложных расчетов остатков и оборотов.

Сообщение было отредактировано: 12 фев 20, 10:16
12 фев 20, 10:16    [22078025]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2019 использование ColumnStore индексов паралельно с построчными (стандартными)?  [new]
Владислав Колосов
Member

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

целевое назначение этих индексов - использование в OLAP хранилищах и подобных, витринах, например. Если вы попытаетесь использовать как таблицы для типовой обработки, то, скорее всего, потерпите неудачу.

Типовой сценарий использования - это выполнение агрегирующих запросов и добавление строк. Секционирование допускается с целью упрощения обслуживания, например, архивации или удаления устаревших данных. Читайте справку и ищите use case, у MS достаточно для этого информации.
12 фев 20, 12:07    [22078126]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2019 использование ColumnStore индексов паралельно с построчными (стандартными)?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 33125
Блог
Если у вас oltp, то просто page-сжатие включите, тем более что объем в 60 млн строк весьма невелик.
Но для интереса можно помониторить планы в момент роста потребления tempdb
12 фев 20, 12:18    [22078135]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2019 использование ColumnStore индексов паралельно с построчными (стандартными)?  [new]
Pvase
Member

Откуда:
Сообщений: 980
Эта база, как раз используется для OLAP кубов. Только расчет в кубах остатков по такой таблице фактов уходит в часы, а то и десятки часов, поэтому сделаны промежуточные теблицы, с которых и сторятся кубы. А чтобы получить эти промежуточные таблицы используются скрипты для расчета остатков и расчета сводных приходов/расходов.
В принципе - это таблица проводок, где указаны счета по дебету и кредиту, а также аналитики на этих счетах. И чтобы построить отчет Баланс на кубах или ФинРез с использованием формул расчетов для измерений и пришлось делать эти промежуточне таблицы, потому что без них кубы могли процессироваться больше суток.
12 фев 20, 12:55    [22078187]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2019 использование ColumnStore индексов паралельно с построчными (стандартными)?  [new]
Владислав Колосов
Member

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

организуйте процесс так, чтобы в колоночную таблицу производилась только вставка. Если в колоночной таблице есть фиксированная и обновляемая части, то можно секционировать таблицу на две секции. При этом изменяемую секцию можно усекать и загружать заново. Можете создать и две отдельные таблицы. Все подготовительные действия выполняйте в OLTP таблицах.
12 фев 20, 13:15    [22078231]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2019 использование ColumnStore индексов паралельно с построчными (стандартными)?  [new]
Pvase
Member

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

организуйте процесс так, чтобы в колоночную таблицу производилась только вставка. Если в колоночной таблице есть фиксированная и обновляемая части, то можно секционировать таблицу на две секции. При этом изменяемую секцию можно усекать и загружать заново. Можете создать и две отдельные таблицы. Все подготовительные действия выполняйте в OLTP таблицах.

Так и сделал. Спасибо, полное время загрузки сократилось вдвое.
17 фев 20, 17:15    [22081540]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2019 использование ColumnStore индексов паралельно с построчными (стандартными)?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4309
Pvase
т? В общем нужна доп информация по настройке и использовании этих индексов. Буду очень благодарен за такую информацию.
Для справки. В этой таблице - 60 млн. строк. за ночь загружается и обновляется около 300 тысяч строк. Но может и больше. Потом по этой таблице строятся итоговые таблицы с результатами от 500 тысяч до 10 млн. строк путем выборки из главной таблицы и сложных расчетов остатков и оборотов.


Сделайте партиционирование совпадающие с партиционированием в кубе. Грузите порциями, попадающими в 1-2 партиции.

Мне доводилось на 1млд + строк делать колумнстор и партиционирование тут очень кстати.

Чем больше размер партиции, тем сложнее колумнстору обновляться.

На колумнсторе лучше работают аггрегаты и оконные функции. Прямые SELECT, выбирающие данные работают хуже. Если у вас MOLAP, то вы имеете дело с пряммым SELECT. Попробуйте ROLAP.

Обновляется колумнстор тяжелее, но если добавить памяти и процессоров, это не так будет чувствоваться.

60 млн строк не такой большой объем. 5 лярдов -- тогда есть о чем беспокоиться.
18 фев 20, 08:17    [22081829]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить