Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
Читаю тут книгу и там написано, что плохо когда insert идет в одну и ту же область кластерного индекса и что лучше равномерное распределение, чтобы не было HotSpot.
У меня есть таблица продаж, где кластерный индекс: ДатаПродажи-КодМагазина-Артикул. И как правило продажи льются по текущей дате, т.е. сегодня почти у всех продаж будет одна и та же дата продажи, что насколько я понимаю вызывает HotSpot

Как быть?
18 фев 14, 09:11    [15580355]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Абу аль Хамза
Guest
relief
Читаю тут книгу и там написано, что плохо когда insert идет в одну и ту же область кластерного индекса и что лучше равномерное распределение, чтобы не было HotSpot.
У меня есть таблица продаж, где кластерный индекс: ДатаПродажи-КодМагазина-Артикул. И как правило продажи льются по текущей дате, т.е. сегодня почти у всех продаж будет одна и та же дата продажи, что насколько я понимаю вызывает HotSpot

Как быть?


необходимо добавить guid и сделать его кластерным ключем. в этом случае вставки будут более менее размазаны по всей ширине. чтобы не было page splits - делай rebuild с fillfactor + padindex
18 фев 14, 09:15    [15580372]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31427
relief
И как правило продажи льются по текущей дате, т.е. сегодня почти у всех продаж будет одна и та же дата продажи, что насколько я понимаю вызывает HotSpot

Как быть?
Достаточно, что бы не было длинных транзакций.
"равномерное распределение, чтобы не было HotSpot" - это реально замедляет работу сервера (уменьшает количество транзакций на единицу ресурсов), но увеличивает масштабируемость.
К тому же это актуально для транзакционных систем, а не для хранилищь.

Так что если у вас нет миллионов продаж в секунду в ОЛТП, даже не задумывайтесь.
18 фев 14, 09:18    [15580387]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
Абу аль Хамза
relief
Читаю тут книгу и там написано, что плохо когда insert идет в одну и ту же область кластерного индекса и что лучше равномерное распределение, чтобы не было HotSpot.
У меня есть таблица продаж, где кластерный индекс: ДатаПродажи-КодМагазина-Артикул. И как правило продажи льются по текущей дате, т.е. сегодня почти у всех продаж будет одна и та же дата продажи, что насколько я понимаю вызывает HotSpot

Как быть?


необходимо добавить guid и сделать его кластерным ключем. в этом случае вставки будут более менее размазаны по всей ширине. чтобы не было page splits - делай rebuild с fillfactor + padindex


если я сделаю guid кластерным ключом, то тогда текущий кластерный сделать некластерным?


автор
делай rebuild с fillfactor + padindex

не могли бы подробней объяснить про это

Спасибо
18 фев 14, 09:20    [15580396]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Абу аль Хамза
Guest
relief

если я сделаю guid кластерным ключом, то тогда текущий кластерный сделать некластерным?



да. только я исхожу из того что у тебя интенсивная вставка.
18 фев 14, 09:24    [15580411]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
alexeyvg
Достаточно, что бы не было длинных транзакций.


а они есть. могут сразу заливать пачкой продажи, штук по 1000.

alexeyvg
"равномерное распределение, чтобы не было HotSpot" - это реально замедляет работу сервера (уменьшает количество транзакций на единицу ресурсов), но увеличивает масштабируемость.


я тоже так подумал, что замедляет работу сервера, т.к. продажи в отчеты выводятся за периоды, а если даты будут размазаны, то дольше поиск будет идти.
а в чем увеличивается масштабируемость? я наоборот думал, что если продажи хранятся по возрастанию дат, то можно за прошлый год переносить в другую базу, например
18 фев 14, 09:25    [15580418]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
Абу аль Хамза
relief
если я сделаю guid кластерным ключом, то тогда текущий кластерный сделать некластерным?



да. только я исхожу из того что у тебя интенсивная вставка.


вставка интенсивная, но также интесивно репорты смотрят сложной структуры с джойнами
18 фев 14, 09:26    [15580419]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Абу аль Хамза
Guest
relief

а они есть. могут сразу заливать пачкой продажи, штук по 1000.


тогда тебе не нужно то о чем ты тут спрашиваешь
18 фев 14, 09:26    [15580422]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
Абу аль Хамза
relief
а они есть. могут сразу заливать пачкой продажи, штук по 1000.


тогда тебе не нужно то о чем ты тут спрашиваешь


почему не нужно?
если паралелльно будут заливатся батчи по 1000 продаж, то конкуренция за одну область будет высокой
18 фев 14, 09:35    [15580455]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
DirksDR
Member

Откуда: Пермь
Сообщений: 340
relief
если паралелльно будут заливатся батчи по 1000 продаж, то конкуренция за одну область будет высокой

Если кластерный ключ int(или bigint) identity - тогда вставки пойдут в последний блок таблицы и возможна горячая точка
(любопытно, какая должна быть интенсивность вставок, чтобы это стало заметно).
У Вас кластерный индекс: ДатаПродажи-КодМагазина-Артикул. Ваши батчи по 1000 продаж, наверняка от разных магазинов, так что 99% вставок будут в разные блоки.
Мне кажется, Вам можно не волноваться насчет HotSpot, но "практика - критерий истины".
Если будете экспериментировать, хотелось бы увидеть результаты.
18 фев 14, 10:43    [15580767]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

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

а чему равен размер блока?
18 фев 14, 10:48    [15580789]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Абу аль Хамза
Guest
relief
DirksDR,

а чему равен размер блока?


страница 8 кб
18 фев 14, 10:49    [15580797]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Абу аль Хамза
relief
Читаю тут книгу и там написано, что плохо когда insert идет в одну и ту же область кластерного индекса и что лучше равномерное распределение, чтобы не было HotSpot.
У меня есть таблица продаж, где кластерный индекс: ДатаПродажи-КодМагазина-Артикул. И как правило продажи льются по текущей дате, т.е. сегодня почти у всех продаж будет одна и та же дата продажи, что насколько я понимаю вызывает HotSpot

Как быть?


необходимо добавить guid и сделать его кластерным ключем. в этом случае вставки будут более менее размазаны по всей ширине. чтобы не было page splits - делай rebuild с fillfactor + padindex


но в этом случае будет большая фрагментация и низкий процент заполнения...
18 фев 14, 11:24    [15581024]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

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

и я про тоже
18 фев 14, 12:16    [15581506]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Абу аль Хамза
Guest
Winnipuh
Абу аль Хамза
пропущено...


необходимо добавить guid и сделать его кластерным ключем. в этом случае вставки будут более менее размазаны по всей ширине. чтобы не было page splits - делай rebuild с fillfactor + padindex


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


для вставки - пофиг... для чтения плохо. но ведь автор спрашивает про вставку.
18 фев 14, 13:45    [15582218]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
NickAlex66
Member

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

Так может и нет проблемы (или вы думаете, что она есть, а на самом деле ее нет) для вышей конфигурации-нагрузки.
18 фев 14, 13:58    [15582322]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
Абу аль Хамза
Winnipuh
но в этом случае будет большая фрагментация и низкий процент заполнения...

для вставки - пофиг... для чтения плохо. но ведь автор спрашивает про вставку.
"Пофиг" для кластерного индекса?! Это для того, который еще и данные на листовом уровне хранит?!
Когда последовательные вставки нескольких записей перетряхивают страницы только индекса по всему файлу данных (а использование "изначально случайного" набора GUID примерно к этому и приводит) - это уже "немножко плохо" для производительности вставок... А в случае с кластерным индексом будут перетряхиваться уже страницы с данными...
18 фев 14, 14:33    [15582644]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
o-o
Guest
Абу аль Хамза
необходимо добавить guid и сделать его кластерным ключем
Winnipuh
пропущено...

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


для вставки - пофиг... для чтения плохо. но ведь автор спрашивает про вставку.


фигасебе как тут весело

Paul Randal: An example of a nasty cluster key

the random GUID high-order key is always a bad idea, as it means the clustered index will be heavily fragmented as records are inserted.

для вставки page splits это еще и генерация лишних записей лога.
18 фев 14, 15:34    [15583219]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31427
relief
alexeyvg
Достаточно, что бы не было длинных транзакций.

а они есть. могут сразу заливать пачкой продажи, штук по 1000.
Так вот с ними и нужно бороться, а не с мифическим HotSpot. Наверняка там будут блокировки при обновлении индексов, блокировки диапазонов и прочая муть, которая будет препятствовать одновременным вставкам данных из параллельных процессов.
relief
а в чем увеличивается масштабируемость? я наоборот думал, что если продажи хранятся по возрастанию дат, то можно за прошлый год переносить в другую базу, например
Ну, переносить данные на разные серверы и так ничто не мешает.

Борьба с HotSpot - это борьба за то, что бы много процессоров и дисков не долбились в одну точку с одним ресурсом. Но это делается ценой размазывания данных, фрагментации, неоптимального доступа к дискам и т.п.
relief
если паралелльно будут заливатся батчи по 1000 продаж, то конкуренция за одну область будет высокой
Это неинтенсивная вставка. Я говорил - интенсивная - это стотыщь в секунду.
Когда вы пытаетесь распарралелить нагрузку на 500 ядер и на 1000 дисков, но вам мешает HotSpot. Вот тогда с ним борются.

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

Готовите все данные во временных таблицах, потом открываете транзакцию, и вжжжик - вставляете данные в постоянную таблицу за 0.01 сек.
В крайнем случае ещё в эту транзакцию добавляете нужные проверки данных, если это нужно для целостности. Тогда будет 0.1 сек.
18 фев 14, 15:37    [15583250]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
alexeyvg


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

Готовите все данные во временных таблицах, потом открываете транзакцию, и вжжжик - вставляете данные в постоянную таблицу за 0.01 сек.
В крайнем случае ещё в эту транзакцию добавляете нужные проверки данных, если это нужно для целостности. Тогда будет 0.1 сек.


а в случае селекта с 5 джойнами, что лучше: писать один большой селект или 4 заджойненные таблицы сначала выбрать во временные таблицы и потом джойнить уже на временные таблицы?

или надо смотреть по ситуации?
18 фев 14, 16:10    [15583566]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31427
relief
а в случае селекта с 5 джойнами, что лучше: писать один большой селект или 4 заджойненные таблицы сначала выбрать во временные таблицы и потом джойнить уже на временные таблицы?

или надо смотреть по ситуации?
Самое критичное - блокировка при изменении данных, особенно в общей транзакции.

Для обычного селекта можно не мудрить с времянками.
18 фев 14, 16:24    [15583690]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
o-o
the random GUID high-order key is always a bad idea, as it means the clustered index will be heavily fragmented as records are inserted.
Такое ощущение, что про FillFactor вообще никто не слышал.
18 фев 14, 16:42    [15583830]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
Абу аль Хамза
Guest
o-o
Абу аль Хамза
необходимо добавить guid и сделать его кластерным ключем
пропущено...


для вставки - пофиг... для чтения плохо. но ведь автор спрашивает про вставку.


фигасебе как тут весело

Paul Randal: An example of a nasty cluster key

the random GUID high-order key is always a bad idea, as it means the clustered index will be heavily fragmented as records are inserted.

для вставки page splits это еще и генерация лишних записей лога.


1) на самом деле, для вставки какой-либо строки, совершенно не важно насколько фрагментирован индекс (вопрос +/- 1 прыжок по странице.
2) для index seek'ов - тоже самое.
3) имеет значение для index scan / range scan.
4) page splits - для этого следует делать rebuild с fillfactor+padindex (см. предыдущие мои посты)
5) мы говорим судя по вопросу автора о latch на страницу, в которую слишком многие хотят вставить.
6) если нагрузка дошла до (5), то почитай у того же randal'a по поводу размазывания вставки guid'ом.
18 фев 14, 16:43    [15583838]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
relief
Member

Откуда:
Сообщений: 1197
Абу аль Хамза
6) если нагрузка дошла до (5), то почитай у того же randal'a по поводу размазывания вставки guid'ом.


пояснишь?
18 фев 14, 16:53    [15583903]     Ответить | Цитировать Сообщить модератору
 Re: Кластерный индекс и HotSpot  [new]
o-o
Guest
Абу аль Хамза
o-o
для вставки page splits это еще и генерация лишних записей лога.

1) на самом деле, для вставки какой-либо строки, совершенно не важно насколько фрагментирован индекс (вопрос +/- 1 прыжок

еще раз: для вставки есть разница, если произойдет page split.
и я совсем не про "для вставки строки не важно насколько фрагментирован индекс"
а про то, что если происходит page split, то это протоколируется.

вот пример, где из-за page split-а при вставке генерится в 18 раз больше объема записей лога:
How expensive are page splits in terms of transaction log?
18 фев 14, 17:28    [15584230]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить