powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / columnstore новичковый вопрос
10 сообщений из 10, страница 1 из 1
columnstore новичковый вопрос
    #40066189
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никогда не работал с columnstore, прошу совета.

Есть простая таблица из четырех интов (два small) в которую по больше миллиона записей в день будут заливать.
Очень уж она хорошо жмется в columnstor формате, и предназначена для визуализации только, никаких обновлений. Сами данные обычно актуальны в районе месяца, дальше крайне редкие обращения возможны.

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

Совершенно не знаю как columnstor кешируется и вообще как с ним работает сервер.
Имеет ли смысл для того, что бы в память помещались последние несколько дней данных, допустим, партицировать её?
Какие чанки имеет смысл рассматривать?

Может быть проще не делить, но тогда она будет больше нескольких гигов в год расти. Я не админю это, но представляю геморой с большими таблицами.

Заранее спасибо за мысли
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066200
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Доступ к колоночному индексу всегда осуществляется только одним способом: он сканируется целиком (ну, или в рамках партиции, если, сервер понимает, что можно сделать исключение секций).
2. Собственно, поэтому и первоначальная "задержка" - вся таблица подбрасывается в память, если там для этого есть место. И поэтому потом - быстрее.
3. Прелесть в таком поведении, безусловно, есть, т.к. колоночный индекс сжимает хранящиеся данные раз в 8-10, при хорошем раскладе, и, например, если раньше таблица занимала 600Гб, и категорически не влезала в память, даже частями, то теперь - меньше 60 Гб, и влезает туда со свистом. Все запросы ускорились в 100 раз, и это - не фигура речи (из собственной памяти).
4. Да, партиционировать имеет смысл, если в запросах явным образом будет фигурировать ключ партиционирования, ограничивая набор секций, который будет просматриваться.
5. Иногда, партиционировать имеет смысл и по другим соображениям, прежде всего это - массовая загрузка данных в рядомстоящую таблицу, а потом включение ее в основную таблицу в виде секции. Позволяет блокировать основной поток читателей из таблицы не более чем на секунды switch partition. Причем в 2017-19 появилось еще и "ленивое переключение" - можно подождать, пока закончатся все мешающие запросы, а потом - переключиться.
6. Не делить проще, запросы компилируются быстрее, и, если исключение секций в запросе невозможно (или не бывает) - то и выполняется быстрее.
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066359
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza,

1) С обновлением записей там все плохо, но, если у вас не будет такой операции, то ок.
2) Предусмотрите секционирование, чтобы удалять ненужное, иначе все удаленные записи будут все равно лежать в таблице.
3) Возможно, вам придется использовать диспетчер ресурсов, иначе 4-5 запросов к такой таблице могут сожрать всю оперативку

Это из тех особенностей, что в встречал
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066372
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
Доступ к колоночному индексу всегда осуществляется только одним способом: он сканируется целиком (ну, или в рамках партиции, если, сервер понимает, что можно сделать исключение секций).


Нет,

во-первых, columnstore индекс хранится сегментами и есть механизм segment elimination
во-вторых, columnstore хранится поколоночно, и доступ идет только к данным полей из запроса
в-третьих, внутри columnstore есть справочники, причем как на уровне сегмента так и секции, обращения к которым идет не всегда.
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066433
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем за идеи.

Значит буду делать партиции. Выборки там как раз по ключу партиции. Осталось только определиться с размером, что бы комфортно в память влезало.

Как я понимаю никаких иных механизмов тонкой настройки этого индекса пока нет в сервере.

msLexесть механизм segment elimination
Спасибо за наводку, погляжу на segment skipped когда буду размеры партиций подбирать.
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066442
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PizzaPizza,

А зачем колоночный, может достаточно сжатия?
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066479
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
PizzaPizza,

А зачем колоночный, может достаточно сжатия?



Columnstore очень хорошо жмет некоторые виды данных (я не про типы а про распределение)
и, судя по первому посту, это один из тех случаем

Отсутсnвуют update а удаления только секциям
Если на этих данных еще и гоняют аналитические запросы, то CS прям создан для этого кейса
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066545
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex
uaggster
Доступ к колоночному индексу всегда осуществляется только одним способом: он сканируется целиком ( ну, или в рамках партиции, если, сервер понимает, что можно сделать исключение секций ).


Нет,

во-первых, columnstore индекс хранится сегментами и есть механизм segment elimination

А выделенное не читаем? :-)

msLexво-вторых, columnstore хранится поколоночно, и доступ идет только к данным полей из запроса
в-третьих, внутри columnstore есть справочники, причем как на уровне сегмента так и секции, обращения к которым идет не всегда.
На плане, операции с колоночным индексом всегда присутствуют только в одном варианте: сканирование индекса.
Хотя, в принципе вы правы, правильнее писать: сканирование [i]колонок [/i ]индекса.
Они всегда просматриваются целиком (ну, или в рамках секции, если исключение секций - возможно).
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066563
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster
А выделенное не читаем? :-)

Вы разницу между секциями и сегментами замечаете?
...
Рейтинг: 0 / 0
columnstore новичковый вопрос
    #40066665
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex

Вы разницу между секциями и сегментами замечаете?

А. Понял. Про это
Не знал, честно говоря. Спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / columnstore новичковый вопрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]