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

Откуда: Москва
Сообщений: 1014
Проектируется база данных под очень большие объемы данных, и очень большой нагрузки.
Планируется добавление в год 50.000.000 - 100.000.000 спецификаций документов + 300.000 - 5.000.000 шапок в год.

Таблицы проектируются как секционированные по годам.

Стандартные отчеты будут выполняться за 2-3 последних дня, максимально 1-2 последних месяца,
так что объеденять придется до 300.000 - 500.000 шапок и 3.000.000 - 5.000.000, добавленых за этот период.

Пример запросов:
select SS.WareCode, SS.StoreTypeID,SS.VLWareQualityID,SS.ReserveObjectID,sum(HS.Direction*SS.Amount)
	from VLDocHeadersView HS inner join VLDocSpecsView SS on HS.DocHeaderID = SS.DocHeaderID and HS.ObjectID=SS.ObjectID
		where HS.DocDate >='10/01/2004' and HS.DocDate< '10/05/2004'
			and SS.DocDate >='10/01/2004' and SS.DocDate< '10/05/2004'
			and HS.Deleted = 0 and SS.Deleted = 0 
			and HS.DocTypeID in (3,4,5,0)
			and HS.DocObjectID=0
			and SS.DocObjectID=0
				group by SS.WareCode, SS.StoreTypeID,SS.VLWareQualityID,SS.ReserveObjectID
					having sum(HS.Direction*SS.Amount)<>0

select SS.WareCode, SS.StoreTypeID,SS.VLWareQualityID,SS.ReserveObjectID	
       from VLDocHeadersView HS inner join VLDocSpecsView SS on HS.DocHeaderID = SS.DocHeaderID and HS.ObjectID=SS.ObjectID
		where HS.DocDate >='10/01/2004' and HS.DocDate< '10/05/2004'
			and SS.DocDate >='10/01/2004' and SS.DocDate< '10/05/2004'
			and HS.Deleted = 0 and SS.Deleted = 0 
			and HS.DocTypeID in (3,4,5,0)
			and HS.DocObjectID=0
			and SS.DocObjectID=0

Планируется минимизировать нагрузку на CPU и память при больших количествах таких огромных объединений (40 - 80 паралельных запусков).
Железо достаточно мощное.

Для этого предварительно были созданы соответствующие кластерные индексы на шапках и спецификациях, врезультате получили MERGE JOIN, как наиболее экономичное к ресурсам при join.

Стоит ли использовать при таких отчетах HASH типы соединения?
Вопрос с оговоркой на будущее, так как сложно прогнозировать рост нагрузки.
Кто имеет такой опыт - прошу высказываться.
24 окт 05, 15:08    [1998830]     Ответить | Цитировать Сообщить модератору
 Re: Скорость MERGE объединений больших масивов данных  [new]
WiRuc
Member

Откуда: Воронеж
Сообщений: 1280
Ну вы же сами себе и ответили: MERGE join более экономичен к ресурсам и при прочих равных условиях предпочтителен перед HASH. HASH оптимизатор предпринимает из-за безысходности при отсутствии подходящих для MERGE джойна индексов.
24 окт 05, 15:25    [1998953]     Ответить | Цитировать Сообщить модератору
 Re: Скорость MERGE объединений больших масивов данных  [new]
aleksey_fomchenko
Member

Откуда: Москва
Сообщений: 1014
Просто при MERGE я достаточно сложно строить индексы для всевозможных и различных по конформации запросов.
Как правело один тип объединения.
А HASH более уневерсален, проглотит практически любые запросы.
Я же оговорился - с расчетом на непредсказуемое будущее.

Если у кого либо есть еще коментарии - пишите.
Может есть какая то выгода от тех или иных при распаралеливании?...

Для начала буду затачивать кластерные индексы под MERGE объединение.
24 окт 05, 15:53    [1999150]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить