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

Откуда: Msk ->NL
Сообщений: 319
Привет.

В связи с переходом из Оракла в Mssql 2012 возникла сразу куча вопросов.
Один из них в сабже.

Есть мысль сделать партиции по ключу (DateID, PrimaryID), где DateID это YYYYMMDD, а PrimaryID это суррогатный ключ. Все вместе - это кластерный индекс ессно.
Речь идет о таблице фактов в ХД. Партиции по месяцу.

Разумная идея?

PS: Я пытался было как в Оракле сбацать просто по DateID, но mssql стал предсказуемо ругаться :)
7 май 13, 16:05    [14268708]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Glebanski
Разумная идея?

У вас секционирование ради секционирования ? Или есть другие цели ?

Glebanski
Я пытался было как в Оракле сбацать просто по DateID, но mssql стал предсказуемо ругаться :)

Разумеется mssql будут ругаться на синтаксис Оракла
7 май 13, 16:08    [14268747]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
по дате вы секции нарежете, да. а по сурогату - гемор имхо тот еще (диапазоны). хотя и тут нет ничего невозможного, но смысл-то в чем? и - да - приплюсуюсь к тов.Glory с вопросом - а зачем вам секции? они, как бы, вообще-то все, кроме администрирования, ухудшают почти всегда. за очень редким исключением
7 май 13, 16:14    [14268821]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Glory,

Основная цель - чтобы вставка данных в последнюю партицию (текущий месяц) происходила достаточно быстро. ( никакого Swap Partition пока не планируется )

Синтаксис тут абс. не при чем.
7 май 13, 16:15    [14268825]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Glebanski
Glory,

Основная цель - чтобы вставка данных в последнюю партицию (текущий месяц) происходила достаточно быстро. ( никакого Swap Partition пока не планируется )

Синтаксис тут абс. не при чем.
А сейчас эта вставка происходит медленно, что ли?
7 май 13, 16:16    [14268839]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Glebanski
mssql стал предсказуемо ругаться :)

Но ни SQL-скрипта, ни сообщения об ошибке вы, конечно же, не покажете.
7 май 13, 16:17    [14268853]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Все пока в процессе дизайна.
7 май 13, 16:30    [14269015]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Glebanski
Все пока в процессе дизайна.

И какие у вас сейчас проблемы с "чтобы вставка данных происходила достаточно быстро." ?

Glebanski
Синтаксис тут абс. не при чем.

А Оракл причем тогда ?
7 май 13, 16:32    [14269032]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Прошу прощения, криво сформулировал вопрос.

При попытке создания кластерного индекса по первичному ключу получаю
Msg 1908, Level 16, State 1, Line 1
Column 'DateID' is partitioning column of the index 'PK_Connection. Partition columns for a unique index must be a subset of the index key.

Соответсвенно выбор невелик
- Собрать все Foreign Keys в один уникальный ключ, поставив DateID в начало списка и сделать non-clustered index из этой солянки
- Сгенерировать Surrogate key и сделать типа
CONSTRAINT [PK_Connection] PRIMARY KEY CLUSTERED 
(
	[DateID] ASC,
	[ConnectionID] ASC
)


Можно конечно таблицу фактов и без surrogate key оставить, но я к такому как-то не привык...

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

Честно говоря, всегда был абсолютно уверен, что запрос к партиционированной по дате таблице всегда выполняется быстрее, если в условии использутеся partitioning key (Дата обычно, так?). Может в MS SQL все наоборот? Просветите, пожалуйста.
7 май 13, 18:10    [14269713]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Glebanski
поставив DateID в начало списка

Столбец секционирования не обязан быть первым столбцом секционированного уникального индекса. Он может быть любым по счёту, главное, чтобы входил в набор ключевых полей индекса.
7 май 13, 18:25    [14269768]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Glebanski
При попытке создания кластерного индекса по первичному ключу получаю
Непонятно, кто на ком сидел. У вас уже есть первичный ключ, а вы хотите ещё сделать дополнительно уникальный кластерный индекс?

Glebanski
Честно говоря, всегда был абсолютно уверен, что запрос к партиционированной по дате таблице всегда выполняется быстрее, если в условии использутеся partitioning key (Дата обычно, так?). Может в MS SQL все наоборот? Просветите, пожалуйста.
К партицированной да, нужно в запросах использовать partitioning key.

Только Crimean про другое писал - сделав партицирование, вы только уменьшите скорость вставки и выборки, так что нужно сначала опреджелиться с целями самого партицирования.
7 май 13, 18:27    [14269773]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
alexeyvg
Только Crimean про другое писал - сделав партицирование, вы только уменьшите скорость вставки и выборки, так что нужно сначала опреджелиться с целями самого партицирования.


ну, насчет "уронить" скорость вставки - спорно, но более чем возможно. а вот "уронить" скорость выборки - весьма вероятно кроме случаев когда большинство запросов будут явно содержать поля секционирования в условиях
7 май 13, 18:34    [14269796]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Glebanski
Можно конечно таблицу фактов и без surrogate key оставить, но я к такому как-то не привык...
Вообще для DWH, для таблиц фактов это классика, без суррогатного ключа...
7 май 13, 18:34    [14269797]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
Crimean
alexeyvg
Только Crimean про другое писал - сделав партицирование, вы только уменьшите скорость вставки и выборки, так что нужно сначала опреджелиться с целями самого партицирования.


ну, насчет "уронить" скорость вставки - спорно, но более чем возможно. а вот "уронить" скорость выборки - весьма вероятно кроме случаев когда большинство запросов будут явно содержать поля секционирования в условиях
Ну да, понятно, я пишу не про гарантию, а про большую вероятность всё замедлить. По любому выгоды очень и очень призрачные, секционирование без отключения-подключения секций - деньги на ветер :-)
7 май 13, 18:36    [14269803]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Мне кажется, все что-то недоговаривают
Если таблица ~50 Gb, то миллион инсертов в непартиционированную таблицу будет выполняться столько же сколько и в последнюю секцию партиционированной таблицы?
Правильно ли я понимаю?
Или в таких случаях есть какой-то фокус типа "частично перестроить индексы"? сорри за ересь.
7 май 13, 19:05    [14269879]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Думаю хватит
- кластерного индекса по DateID
- unique constraint по всем Foreign Keys, включая DateID
- Surrogate key нафиг не нужен при таком раскладе.
Правильный расклад?

При условии конечно, что вопрос "зачем партиционирование" решен в пользу "нужно"
7 май 13, 19:40    [14269958]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
2 Glebanski

все верно, при "грамотном" секционировании и инсерты будут быстрее и вычитки и можно будет реиндекснуть только одну секцию одного индекса, никакой ереси тут нет
но для дележа по секциям использовать автоинкремент - далеко не лучшая идея, даты (обычно) более чем
7 май 13, 20:50    [14270096]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35395
Блог
Glebanski
- unique constraint по всем Foreign Keys, включая DateID


а это зачем?
7 май 13, 21:24    [14270175]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
В чем причина моих сомнению, я кажется понял.
Главное заблуждение в том, что я полагал, что clustered index может быть только уникальным. Mssql также требует, чтоб partition key был частью каждого уникального индекса. Поэтому я пытался всунуть в один кластерный уникальный индекс DateID и Surrogate Key.
Вчера узнал, что это не так и я вполне могу сделать кластерный неуникальный индекс просто по DateID. И спокойно секционировать таблицу помесячно по этому полю.
Я все правильно понимаю?

ЗЫ: ересью я назвал "частичную перестройку индекса на непартиционированной таблице". Такие технологии мне незнакомы и когда я прочитал тут про падение производительности вставки данных в секцию по сравнению со вставкой данных в одну большую таблицу, у меня случился заворот мозгов. :)
8 май 13, 13:06    [14273221]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
GuestG
Guest
alexeyvg
Glebanski
Можно конечно таблицу фактов и без surrogate key оставить, но я к такому как-то не привык...
Вообще для DWH, для таблиц фактов это классика, без суррогатного ключа...

неудобно потом с таким фактом работать, например обрабатывать пакетами по 10 лямов
8 май 13, 13:24    [14273336]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31977
GuestG
alexeyvg
пропущено...
Вообще для DWH, для таблиц фактов это классика, без суррогатного ключа...

неудобно потом с таким фактом работать, например обрабатывать пакетами по 10 лямов
Зависит от ситуации. Я не говорю, что это всегда делают, но в большинстве случаев (из тех, что я видел)

Обычно у фактов в ПК есть дата, и обработку можно вести по ней, если нужны порции.
Ну а при секционировании вообще красота - можно делать загрузку в секциях (допустим, по суткам или по часам), сканирование секциями...
8 май 13, 13:46    [14273469]     Ответить | Цитировать Сообщить модератору
 Re: Партиционирование по DateID и Identity - хорошая идея?  [new]
Glebanski
Member

Откуда: Msk ->NL
Сообщений: 319
Насчет Surrogate Key -
а SSASу случайно не удобнее кубы рефрешить если в таблице фактов есть уникальный последовательный ключ?
8 май 13, 14:54    [14274113]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить