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

Откуда: Кострома
Сообщений: 158
Привет всем.
прошу разрешить мои сомнения насчет следующего:

есть два mssql сервера, которые видят друг друга как linked, на 1м выполняется хранимаю процедура, суть которой вычисление каких-либо данных и затем синхронизация этих данных со 2м linked-сервером:


т.е. примерно следующее:
способ 1:
		select @m_ID = max(ID) from [b]linked_server2[/b].catalog.owner.table
		if (@m_ID is NULL) set @m_ID = 0

		set @sql_script = 
		'
			insert into linked_server2.catalog.owner.table
			select * from table where ID > ' + convert(nvarchar, @m_ID) + '
		'
		execute sp_executesql @sql_script


способ 2:
		select @m_ID = max(ID) from linked_server2.catalog.owner.table
		if (@m_ID is NULL) set @m_ID = 0

		set @sql_script = 
		'
			insert into table
			select * from [b]linked_server1[/b].catalog.owner.table where ID > ' + convert(nvarchar, @m_ID) + '
		'
		execute linked_server2.catalog.owner.sp_executesql @sql_script


разница в том, что в первом случае скрипт запускается на локальном сервере, заталкивая данные на второй linked_server2, во втором случае сам скрипт запускается на удаленном linked_server2, беря данные с текущего, но рассматривая текущий как linked (linked_server2.catalog.owner.sp_executesql скрипт выполняется на linked_server2)...

Я пока отдаю предпочтение методу push, но вот коллега по работе смутил меня тем, сказав, что вариант номер 2 гораздо лучше с точки зрения производительности - т.е. pull performance > push performance - с чем связано не объяснил, но точно уверен, так как приходилось сталкиваться с перекачкой больший объемов данных...

Так ли это? если так, с чем связано и можно ли заставить работать первый вариант с такой же производительностью?


С уважением
duШes
....return ThisForm.exGrid1.p_oColumns("COLUMN1").M_AddHeader("header4",4)
14 мар 06, 16:53    [2447296]     Ответить | Цитировать Сообщить модератору
 Re: push & pull  [new]
Dushes
Member

Откуда: Кострома
Сообщений: 158
up
15 мар 06, 09:34    [2449174]     Ответить | Цитировать Сообщить модератору
 Re: push & pull  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Dushes
Я пока отдаю предпочтение методу push, но вот коллега по работе смутил меня тем, сказав, что вариант номер 2 гораздо лучше с точки зрения производительности - т.е. pull performance > push performance - с чем связано не объяснил, но точно уверен, так как приходилось сталкиваться с перекачкой больший объемов данных...
А сравнивать не пробовали в тестовой среде?
15 мар 06, 09:38    [2449186]     Ответить | Цитировать Сообщить модератору
 Re: push & pull  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Вы полагаете, что в данном случае объем данных, перекачанных по сети, различен для этих двух способов?

Например, что в одном из них фильтрация произойдет сразу при выборке и по сети перекачаются только новые данные, а в другом сперва вся таблица закачается с источника, а фильтрация будет произведена уже после перекачки на приемнике?
15 мар 06, 10:38    [2449471]     Ответить | Цитировать Сообщить модератору
 Re: push & pull  [new]
Dushes
Member

Откуда: Кострома
Сообщений: 158
GreenSunrise
Вы полагаете, что в данном случае объем данных, перекачанных по сети, различен для этих двух способов?

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


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

о результатах напишу... просто запостил, что бы узнать, может кто уже сталкивался с такой задачей, просто вариант push более масштабируемее с точки зрения саппорта, я могу иметь несколько баз данных, с которых будет происходить закачка на один удаленный сервер, не меняя скрипта для указания сервера источника, что произойдет для варианта pull
15 мар 06, 10:53    [2449563]     Ответить | Цитировать Сообщить модератору
 Re: push & pull  [new]
Dushes
Member

Откуда: Кострома
Сообщений: 158
все, я в расстройстве...
для метода pull все выполняется как и положено, т.е.
выполняется чисто insert into from select, для push ужас:

сначала выполняется
IF @@TRANCOUNT > 0 ROLLBACK TRAN


затем открывается курсор:
exec sp_cursoropen @P1 output, N'select * from "ROICommon"."dbo"."Test_PullPushMethods"', @P2 output, @P3 output, @P4 output


затем для КАЖДОЙ !!! записи
exec sp_cursor 180150000, 4, 0, N'ROICommon.dbo.Test_PullPushMethods', @id = 1002, @column_01 = N'4.996', @column_02 = N'49.96', @column_03 = N'499.6', @column_04 = N'4996', @column_05 = N'49960', @column_06 = N'499600', @column_07 = N'4.996e+006', @column_08 = N'4.996e+007', @column_09 = N'4.996e+008', @column_10 = N'4.996e+009'


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

ну и соответственно в конце перегона данных
exec sp_cursorclose 180150000


и закрытие транзакции...
честно говоря, не понял, чем Insert into Linked_server.catalog.owner.table from select отличается от Insert into table from Linked_server.catalog.owner.table - в BOL ничего не нашел такого, чтобы была раъяснена разница в поведении...

С уважением
Смирнов Андрей
15 мар 06, 12:54    [2450495]     Ответить | Цитировать Сообщить модератору
 Re: push & pull  [new]
Dushes
Member

Откуда: Кострома
Сообщений: 158
up
15 мар 06, 16:07    [2451880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить