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

Откуда:
Сообщений: 625
1. EXEC ('SELECT TOP 10 * FROM DB1.dbo.T1') AT [LS1];

2. SELECT TOP 10 * FROM LS1.DB1.dbo.T1

3. EXEC LS1.DB1.dbo.sp_executesql 'SELECT TOP 10 * FROM DB1.dbo.T1'


какие из этих вызовов данных с удаленного сервера наиболее оптимальный. С учетом того, что необходимо выполнить более сложный запрос к таблице с кол-вом записей более 500 млн
27 май 15, 07:31    [17693930]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
abort
1. EXEC ('SELECT TOP 10 * FROM DB1.dbo.T1') AT [LS1];

2. SELECT TOP 10 * FROM LS1.DB1.dbo.T1

3. EXEC LS1.DB1.dbo.sp_executesql 'SELECT TOP 10 * FROM DB1.dbo.T1'


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


то есть чисто селектом выбрать 500 млн записей и потом юзер будет смотреть на них?
27 май 15, 08:04    [17693981]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
abort
какие из этих вызовов данных с удаленного сервера наиболее оптимальный.

В чем будем мерять оптимальность ?
27 май 15, 09:54    [17694387]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
abort
Member

Откуда:
Сообщений: 625
всего кол0во записей 500 млн, выборка будет возвращать около 25-30 записей. Вопрос на какой сервер ляжет основная часть нагрузки. На удаленном или на вызываемом?
27 май 15, 11:24    [17695012]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
abort
Вопрос на какой сервер ляжет основная часть нагрузки. На удаленном или на вызываемом?

Посмотреть на план выполнения и узнать ?
27 май 15, 11:25    [17695020]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
abort,

Если вы хотите нормально качать огромные объёмы с удалённого сервера, оптимально используя канал и вставку bulkinsert, используйте SSIS DataFlow. Остальное по производительности ничто.
27 май 15, 12:40    [17695499]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
a_voronin

Если вы хотите нормально качать огромные объёмы с удалённого сервера,.


abort
выборка будет возвращать около 25-30 записей
27 май 15, 12:42    [17695512]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
abort
всего кол0во записей 500 млн, выборка будет возвращать около 25-30 записей. Вопрос на какой сервер ляжет основная часть нагрузки. На удаленном или на вызываемом?


А какова суть запроса? Если вы делаете запрос на удалённом сервере и там получаете результат, то естественно нагрузка на нем. Если у вас половина таблиц на удалённом, а половина на локальном и вы все это джойнить собираетесь, вообще лажа будут, положите канал, будете ловить дедлоки и т.п., вот в этом случае лучше dataFlow использовать. Он лучше такие вещи переваривает.
27 май 15, 13:04    [17695632]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Кот Матроскин
a_voronin
Если вы хотите нормально качать огромные объёмы с удалённого сервера,.


abort
выборка будет возвращать около 25-30 записей


Из второго не следует. что не надо прокачивать огромные объёмы. В чём характер запроса?
27 май 15, 13:06    [17695641]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin, может поделитесь тайными знаниями почему:

1. Например, вариант
insert into MyTable with (tablock) exec('Some query') at MyLinkedServer
по производительности "ничто" в сравнении с DataFlow?

2. Почему распределенный запрос приводит к "дедлокам и т.п."? И что такое это самое "т.п."?
27 май 15, 13:23    [17695801]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin, может поделитесь тайными знаниями почему:

1. Например, вариант
insert into MyTable with (tablock) exec('Some query') at MyLinkedServer
по производительности "ничто" в сравнении с DataFlow?

2. Почему распределенный запрос приводит к "дедлокам и т.п."? И что такое это самое "т.п."?



Потому что в первом случае под SSIS будет порционный BULK INSERT, а он явно монстрозного стандартного INSERT, который у вас выжрет лог даже на SIMPLE MODEL.
Второе зависит от обстоятельств. Что на транзакции будут в этот момент гулять на источнике. DataFlow заберёт кусок данных сканом и отпустит их, а ваш будет держать транзакцию. А если еще распределённую транзакцию включить.
Третье много зависит от того, что стоит за 'Some query'
27 май 15, 14:05    [17696058]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Потому что в первом случае под SSIS будет порционный BULK INSERT, а он явно монстрозного стандартного INSERT, который у вас выжрет лог даже на SIMPLE MODEL.
Читайте матчасть:
https://technet.microsoft.com/en-us/library/ms191244(v=sql.105).aspx
https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx
a_voronin
DataFlow заберёт кусок данных сканом и отпустит их, а ваш будет держать транзакцию.
И что? Чтобы получить дедлок, нужно иметь конкуренцию за ресурсы. Наличие открытой транзакции не означает, что такая конкуренция имеет место.
a_voronin
Третье много зависит от того, что стоит за 'Some query'
И как это влияет на умопомрачительность производительности DataFlow?
27 май 15, 14:36    [17696226]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
Третье много зависит от того, что стоит за 'Some query'
И как это влияет на умопомрачительность производительности DataFlow?


Это влияет не на производительность DataFlow, а на непроизводительность 'Some query'.

Одно из мест, где DataFlow явно рулит -- это JOIN или MERGE между разными серверами.
27 май 15, 14:42    [17696264]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
Потому что в первом случае под SSIS будет порционный BULK INSERT, а он явно монстрозного стандартного INSERT, который у вас выжрет лог даже на SIMPLE MODEL.
Читайте матчасть:
https://technet.microsoft.com/en-us/library/ms191244(v=sql.105).aspx
https://technet.microsoft.com/en-us/library/dd425070(v=sql.100).aspx


И какое отношение эти ссылки имеют к LinkedServer-ам и распределённым транзакциям?

Я уже давно развлекаюсь загрузкой массовой загрузкой в партиционированный columnstore, что в общем-то соответствует этим ссылкам с коррекцией на версию сервера. А вы можете дальше развлекаться Linked Server-ами
27 май 15, 14:47    [17696297]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Это влияет не на производительность DataFlow, а на непроизводительность 'Some query'.
И каким образом DataFlow может нивелировать непроизводительность 'Some query', а остальные способы не могут?
a_voronin
Одно из мест, где DataFlow явно рулит -- это JOIN или MERGE между разными серверами.
Т.е. SSIS гораздо быстрее соединяет наборы, чем Database Engine? Круто. Какой-нибудь пруф есть?

a_voronin
И какое отношение эти ссылки имеют к LinkedServer-ам и распределённым транзакциям?
Это имеет отношение к
a_voronin
а он явно монстрозного стандартного INSERT, который у вас выжрет лог даже на SIMPLE MODEL.

a_voronin
Я уже давно развлекаюсь загрузкой массовой загрузкой в партиционированный columnstore
Ваши развлечения - ваше личное дело. Не надо их возводить в ранг абсолютной истины.
27 май 15, 15:28    [17696575]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
Т.е. SSIS гораздо быстрее соединяет наборы, чем Database Engine? Круто. Какой-нибудь пруф есть?


database Engine в принципе не может соединять распределённые наборы -- он их скачивает в темп, а уже потом соединяет. А пруфом заниматься не буду
27 май 15, 15:32    [17696609]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
database Engine в принципе не может соединять распределённые наборы -- он их скачивает в темп, а уже потом соединяет.
А SSIS, типа, не скачивает, а сразу получает нужный результат из астрала, потому что удаленные сервера сами между собой договариваются? И почему сразу в темп?
a_voronin
А пруфом заниматься не буду
Кто-бы сомневался.
27 май 15, 15:43    [17696688]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
database Engine в принципе не может соединять распределённые наборы -- он их скачивает в темп, а уже потом соединяет.

Зато database Engine достаточно умен, чтобы решить, на каком из серверов закачиваемый набор будет меньше по размеру
27 май 15, 16:54    [17697190]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
database Engine в принципе не может соединять распределённые наборы -- он их скачивает в темп, а уже потом соединяет.

Зато database Engine достаточно умен, чтобы решить, на каком из серверов закачиваемый набор будет меньше по размеру



И мораль сей басни такова:

DataFlow непонятно что, потому что мы его не знаем. А LinkedServer рулит, потому что мы знаем про костыль Trace Flag 610
27 май 15, 16:58    [17697209]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
DataFlow непонятно что, потому что мы его не знаем. А LinkedServer рулит, потому что мы знаем про костыль Trace Flag 610

DataFlow оперирует набором в памяти. И набор этот точно так же прокачает через сеть. И еще засвопит, если памяти не хватит.
27 май 15, 17:01    [17697234]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
DataFlow непонятно что, потому что мы его не знаем. А LinkedServer рулит, потому что мы знаем про костыль Trace Flag 610

DataFlow оперирует набором в памяти. И набор этот точно так же прокачает через сеть. И еще засвопит, если памяти не хватит.


Вот мы и упёрлись в то, что DataFlow мы не знаем. Ничего он не свопит, если правильно написать. И в памяти держит только текущий буфер. Загрузил 10000 с одного, 10000 с другого, обработал, записал результат. Загрузил следующие в тот же буфер и так далее.

Кто-то писал здесь dataFlow правильно, кто-то смотрел за расходом памяти при его выполнении? Можно прекрасно 500 лямом прокачать задействовав несколько мегабайт памяти.
27 май 15, 17:22    [17697353]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Вот мы и упёрлись в то, что DataFlow мы не знаем. Ничего он не свопит, если правильно написать. И в памяти держит только текущий буфер. Загрузил 10000 с одного, 10000 с другого, обработал, записал результат. Загрузил следующие в тот же буфер и так далее.

Я такие курсоры писал еще на SQL7
27 май 15, 17:32    [17697416]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
И в памяти держит только текущий буфер. Загрузил 10000 с одного, 10000 с другого, обработал, записал результат
И как с таким алгоритмом будет работать MERGE?
a_voronin
Можно прекрасно 500 лямом прокачать задействовав несколько мегабайт памяти.
А Database Engine так не умеет?
27 май 15, 17:35    [17697435]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
И в памяти держит только текущий буфер. Загрузил 10000 с одного, 10000 с другого, обработал, записал результат
И как с таким алгоритмом будет работать MERGE?


прекрасно, вам рассказать, что надо сделать, чтобы он не выжирал кучу памяти?
27 май 15, 17:49    [17697505]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
прекрасно, вам рассказать, что надо сделать, чтобы он не выжирал кучу памяти?
Вы лучше на поставленный вопрос ответьте.
27 май 15, 17:55    [17697537]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
прекрасно, вам рассказать, что надо сделать, чтобы он не выжирал кучу памяти?
Вы лучше на поставленный вопрос ответьте.


Теперь вы сходите проштудируйте матчасть

http://beyondrelational.com/modules/2/blogs/101/posts/13416/ssis-97-when-merge-join-is-your-friend.aspx
http://sqlblog.com/blogs/eric_johnson/archive/2010/02/03/the-trouble-with-ssis-sorting.aspx
27 май 15, 17:56    [17697545]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Теперь вы сходите проштудируйте матчасть
Ну, в отличии от вас, я и так знаю как работает соединение MERGE. А вот вы, похоже даже не осознаете, что для сортировки набора, его надо весь прочитать.
Поэтому ваше
a_voronin
что надо сделать, чтобы он не выжирал кучу памяти?
сводится к подаче на вход мержа наборов данных, уже отсортированных на источниках.
Все тоже самое может делать Database Engine и не хуже SSIS'а. А ваши сведения, что для выполнения распределенного запроса нужно выкачать весь объем удаленных таблиц, давно устарели.
27 май 15, 18:24    [17697673]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
Теперь вы сходите проштудируйте матчасть
Ну, в отличии от вас, я и так знаю как работает соединение MERGE. А вот вы, похоже даже не осознаете, что для сортировки набора, его надо весь прочитать.


Чушь. Вот как раз вы не знаете, что для сортировки набора, его не обязательно зачитывать в память. Об этом как раз и пишут эти ссылки, которые я вам дал, но вы даже не удосужились их читать, потому что знаете всё лучше всех.

Sorted Input ключевое слово
27 май 15, 18:33    [17697710]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Чушь. Вот как раз вы не знаете, что для сортировки набора, его не обязательно зачитывать в память.

А отсортирует набор кто ? Сервер заранее ?
27 май 15, 18:44    [17697769]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
Чушь. Вот как раз вы не знаете, что для сортировки набора, его не обязательно зачитывать в память.

А отсортирует набор кто ? Сервер заранее ?


Да
27 май 15, 18:53    [17697801]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
a_voronin
Glory
пропущено...

А отсортирует набор кто ? Сервер заранее ?


Да


Если сортировка совпадает к индексом или первичным ключом, то строки пойдёт сразу.

The solution is to sort the data from the source using an ORDER BY clause. That alone, however, won’t get it done. You also have to tell SSIS that the data is sorted and how it is sorted. This is done in the Advanced Editor of your data source. First, set the IsSorted property of the source’s output to true. Next, set the SortKeyPosition property of each column you specified in your ORDER BY clause; 1 for first, 2 for second, and so on. A SortKeyPosition value of 0 is the default and means that the column is not used in the sort. That’s all there is to it, using this method you will be able to sort your data so the SSIS transformations are happy, and can work without hours of waiting and memory hogging.
27 май 15, 18:55    [17697809]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Чушь. Вот как раз вы не знаете, что для сортировки набора, его не обязательно зачитывать в память.
Для сортировки набора, как раз необходимо его считывать полностью. Если умеете иначе - публикуйте алгоритм :)

А вам нужно слезть с броневичка и научиться читать, что вам пишут:
invm
Поэтому ваше
a_voronin
что надо сделать, чтобы он не выжирал кучу памяти?
сводится к подаче на вход мержа наборов данных, уже отсортированных на источниках.
27 май 15, 18:55    [17697810]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
]Для сортировки набора, как раз необходимо его считывать полностью.


Мне надо ржать или плакать по поводу вашего заявления?

Картинка с другого сайта.

какой наиболее оптимальный вариант выборки с удаленного сервера
27 май 15, 19:02    [17697836]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Мне надо ржать или плакать по поводу вашего заявления?
Вам нужно научиться думать. А как научитесь, попытаться осознать разницу между "отсортированный набор" и "отсортировать набор".
27 май 15, 19:37    [17697961]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
Мне надо ржать или плакать по поводу вашего заявления?
Вам нужно научиться думать. А как научитесь, попытаться осознать разницу между "отсортированный набор" и "отсортировать набор".


ОтсортирОванный или ОтсортИрованный ?
27 май 15, 19:53    [17698031]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
ОтсортирОванный или ОтсортИрованный ?
Откуда же мне знать?
Вам виднее в каком месте и какие наборы вы пытаетесь мерджить...
27 май 15, 20:14    [17698086]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Давайте начнём с чистого листа. Понятно ли теперь, что DataFlow умеет мерджить и джойнить большие наборы быстро и не выжирая много памяти, если поток написан правильно, конечно, с уже отсортированными источниками, которые при наличии индексов начнут отдавать строки без задержки?
27 май 15, 20:20    [17698100]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Понятно ли теперь, что DataFlow умеет мерджить и джойнить большие наборы быстро и не выжирая много памяти, если поток написан правильно, конечно, с уже отсортированными источниками, которые при наличии индексов начнут отдавать строки без задержки?
Да никто и не сомневался.
Только почему вы решили что Database Engine не умеет того же?
Ну и к сведению - сканирование индекса не гарантирует выдачу строк в порядке ключа.
27 май 15, 20:32    [17698127]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
Понятно ли теперь, что DataFlow умеет мерджить и джойнить большие наборы быстро и не выжирая много памяти, если поток написан правильно, конечно, с уже отсортированными источниками, которые при наличии индексов начнут отдавать строки без задержки?
Да никто и не сомневался.
Только почему вы решили что Database Engine не умеет того же?
Ну и к сведению - сканирование индекса не гарантирует выдачу строк в порядке ключа.


Хорошо вот расклад

1) Таблица А на Сервере А1 500 лямов
2) Таблица B на Сервере B1 300 лямов
3) Таблица С на сервере C1 -- destination
4) Надо сделать A LEFT JOIN B по первичным ключам и записать в С

Вопрос, что произойдёт есть написать JOIN в лоб через линкед сервера С --> A и С --> B? А что будет через Merge в DataFlow, если использовать предварительно отсортированные источники?

Или какие ещё предложения будут?
27 май 15, 20:55    [17698196]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Вопрос, что произойдёт есть написать JOIN в лоб через линкед сервера С --> A и С --> B?

На первом сервере:
use tempdb;
go

create table dbo.A (id int identity primary key, v varchar(100));

insert into dbo.A
select top (1000000)
 'A'
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b

На втором сервере:
use tempdb;
go

create table dbo.B (id int identity primary key, v varchar(100));

insert into B
select top (1000000)
 'B'
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b

На третьем выполняем запрос:
set statistics xml on;

declare @v1 varchar(100), @v2 varchar(100);

select
 @v1 = a.v, @v2 = b.v
from
 Server1.tempdb.dbo.A a left join
 Server2.tempdb.dbo.B b on b.id = a.id;

set statistics xml off;

План:

К сообщению приложен файл. Размер - 12Kb
27 май 15, 21:26    [17698296]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
a_voronin
Вопрос, что произойдёт есть написать JOIN в лоб через линкед сервера С --> A и С --> B?

На первом сервере:
use tempdb;
go

create table dbo.A (id int identity primary key, v varchar(100));

insert into dbo.A
select top (1000000)
 'A'
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b

На втором сервере:
use tempdb;
go

create table dbo.B (id int identity primary key, v varchar(100));

insert into B
select top (1000000)
 'B'
from
 master.dbo.spt_values a cross join
 master.dbo.spt_values b

На третьем выполняем запрос:
set statistics xml on;

declare @v1 varchar(100), @v2 varchar(100);

select
 @v1 = a.v, @v2 = b.v
from
 Server1.tempdb.dbo.A a left join
 Server2.tempdb.dbo.B b on b.id = a.id;

set statistics xml off;

План:


Что с размером лога и tempdb? И как насчёт того, чтобы добавить пару нулей к 1000000 в данном тесте?
27 май 15, 21:32    [17698312]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Можно я перефразирую и подытожу?
Вы заявляете, что SSIS умеет объединять большие таблицы лучше чем Database Engine и при этом тратит на это минимум памяти (ну и других ресурсов наверное), так? Но при этом, всю самую тяжелую и ресурсоемкую работу по джойну, а именно сортировку данных будет выполнять Database Engine!
Быстро делать работу не тратя при этом ресурсов можно только за счет кого-то другого. Попробуйте соединить два огромных текстовых файла в SSIS, не используя памяти.

a_voronin
Давайте начнём с чистого листа. Понятно ли теперь, что DataFlow умеет мерджить и джойнить большие наборы быстро и не выжирая много памяти, если поток написан правильно, конечно, с уже отсортированными источниками, которые при наличии индексов начнут отдавать строки без задержки?
А вы правда думаете, что Database Engine не умеет джойнить большие отсортированные наборы быстро и не выжирая много памяти?
27 май 15, 22:17    [17698465]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
a_voronin
Что с размером лога и tempdb? И как насчёт того, чтобы добавить пару нулей к 1000000 в данном тесте?
Почему вы решили, что MERGE в SSIS это какое то ноу-хау? И что SQL Server делает MERGE JOIN как то по-другому, при этом еще и интенсивно используя tempdb?
27 май 15, 22:20    [17698481]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
a_voronin
Что с размером лога и tempdb?
А вы где-то в плане увидели spill warning?
a_voronin
И как насчёт того, чтобы добавить пару нулей к 1000000 в данном тесте?
Специально для вас:

К сообщению приложен файл. Размер - 17Kb
27 май 15, 23:07    [17698678]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Mind
Можно я перефразирую и подытожу?
Вы заявляете, что SSIS умеет объединять большие таблицы лучше чем Database Engine и при этом тратит на это минимум памяти (ну и других ресурсов наверное), так? Но при этом, всю самую тяжелую и ресурсоемкую работу по джойну, а именно сортировку данных будет выполнять Database Engine!
Быстро делать работу не тратя при этом ресурсов можно только за счет кого-то другого. Попробуйте соединить два огромных текстовых файла в SSIS, не используя памяти.

a_voronin
Давайте начнём с чистого листа. Понятно ли теперь, что DataFlow умеет мерджить и джойнить большие наборы быстро и не выжирая много памяти, если поток написан правильно, конечно, с уже отсортированными источниками, которые при наличии индексов начнут отдавать строки без задержки?
А вы правда думаете, что Database Engine не умеет джойнить большие отсортированные наборы быстро и не выжирая много памяти?


Тяжелая ресурсоёмкая работа по сортировке должна быть сделана заранее путём создания индекса. Также SSIS может пераллельно обрабатывать потоки (несколько загрузок). Пока сервер занят чтением, SSIS занят мерджем, и может им быть занят на ОТДЕЛЬНОМ сервере.

К тому же можно нарваться на кексы с распределёнными транзакциями и безопасностью.
28 май 15, 11:36    [17700364]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Тяжелая ресурсоёмкая работа по сортировке должна быть сделана заранее путём создания индекса.

И только после это появится DataFlow на белом коне и сделает DatabaseEngine ?
28 май 15, 11:39    [17700385]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
Тяжелая ресурсоёмкая работа по сортировке должна быть сделана заранее путём создания индекса.

И только после это появится DataFlow на белом коне и сделает DatabaseEngine ?


Glory, а как в эту картину вписывается DTC? На SSIS его можно не включать. Что насчёт разных collation? Что насчёт блокировок?
28 май 15, 12:04    [17700585]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Glory, а как в эту картину вписывается DTC?

А он должен "вписываться" в эту "картину" ?

a_voronin
Что насчёт разных collation? Что насчёт блокировок?

Все хорошо.
Все хорошо.

PS
И кстати наличие индекса вовсе не гарантирует наличие сортировки в результатах запроса.
28 май 15, 12:09    [17700624]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
a_voronin
Glory
пропущено...

И только после это появится DataFlow на белом коне и сделает DatabaseEngine ?


Что насчёт разных collation?
А что, SSIS сможет нормально смержить данные отсортированные серверами с разными collation?
28 май 15, 20:09    [17703712]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Mind
a_voronin
пропущено...


Что насчёт разных collation?
А что, SSIS сможет нормально смержить данные отсортированные серверами с разными collation?


Если прочитал в unicode, то какие дальше проблемы? Или вы про разные сортировки в келлешинах говорите?
29 май 15, 12:35    [17706014]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
В общем мораль сей басни такова.

Можно перекачивать и мердждить, через линкед сервера, но граблей много
1) Должны быть соответствующие права на всех серверах
2) Будет распределённая транзакция, она может вызывать дедлок с другой активностью на серверах
3) Будет нагрузка на темп и лог (но минимальное логирование вам поможет)
4) Надо следить за совместимостью collation
5) Нет мониторинга по прогрессу переданных строк (хотя в 2016 возможно есть)

В SSIS
1) Нет необходимости париться с безопасностью, если вы можете подсоединиться к каждому серверу по своему коннекшину, то дальнейших действий не надо
2) Нет необходимости в распределенной транзакции, однако если она нужна, её можно включить
3) При наличии индексов в источниках можно подать отсортированные данные (c ORDER BY) и мерджить их без особого расхода CPU и памяти в SSIS
4) Есть счётчика прогресса строк и логирование ошибок

Можно перекачивать, мерджить, трансформировать огромные объёмы через SSIS. Можно делать это инкриментально. Кто не знает как, учите матчасть.
29 май 15, 12:46    [17706057]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
o-o
Guest
a_voronin
В SSIS
1) Нет необходимости париться с безопасностью

т.е. я, не имея прав, используя SSIS, что угодно вычитаю?
29 май 15, 12:55    [17706095]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
2) Будет распределённая транзакция, она может вызывать дедлок с другой активностью на серверах

Дедлоки вызывают не транзакции, а неправильные порядки блокирования и удержания объектов
И откуда вдруг сама по себе возьмется транзакция ?

a_voronin
1) Нет необходимости париться с безопасностью, если вы можете подсоединиться к каждому серверу по своему коннекшину, то дальнейших действий не надо

Т.е. не нужны "Должны быть соответствующие права на всех серверах " ?

a_voronin
Можно перекачивать, мерджить, трансформировать огромные объёмы через SSIS. Можно делать это инкриментально. Кто не знает как, учите матчасть.

Круто. Все деинсталируем SQLServer и переходим SSIS. Вкеь SSIS все умеет лучше SQLServer-а
29 май 15, 12:56    [17706100]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
invm
Member

Откуда: Москва
Сообщений: 9429
Glory
Все деинсталируем SQLServer и переходим SSIS
Нельзя. В SSIS еще нет In-Memory tables, Native compilation и Columnstore indexes.
29 май 15, 13:03    [17706124]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
invm
Glory
Все деинсталируем SQLServer и переходим SSIS
Нельзя. В SSIS еще нет In-Memory tables, Native compilation и Columnstore indexes.

Ядумаю, что это все тщетные попытки SQLServer-а достичь уровня SSIS.
29 май 15, 13:05    [17706136]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
Glory
Все деинсталируем SQLServer и переходим SSIS
Нельзя. В SSIS еще нет In-Memory tables, Native compilation и Columnstore indexes.


Как это нет. Всё есть. Причём ещё с 2005 версии.
29 май 15, 13:07    [17706141]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
o-o
a_voronin
В SSIS
1) Нет необходимости париться с безопасностью

т.е. я, не имея прав, используя SSIS, что угодно вычитаю?


С SSIS точно не потребуется настраивать kerberous, а вот с LinkedServer-ами только так.
29 май 15, 13:08    [17706146]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
1) Нет необходимости париться с безопасностью, если вы можете подсоединиться к каждому серверу по своему коннекшину, то дальнейших действий не надо

Т.е. не нужны "Должны быть соответствующие права на всех серверах " ?


Под SSIS вы можете подсоединиться к разным серверам, под разными учётками, а в случае с Linked вам придётся давать права на всех серверах одной учётке или прописывать логин пароль в самом линкед сервере. А если домены разные?
29 май 15, 13:11    [17706157]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Под SSIS вы можете подсоединиться к разным серверам, под разными учётками, а в случае с Linked вам придётся давать права на всех серверах одной учётке или прописывать логин пароль в самом линкед сервере. А если домены разные?

Остапа несло (с) 12ть стульев
29 май 15, 13:14    [17706173]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
Под SSIS вы можете подсоединиться к разным серверам, под разными учётками, а в случае с Linked вам придётся давать права на всех серверах одной учётке или прописывать логин пароль в самом линкед сервере. А если домены разные?

Остапа несло (с) 12ть стульев


Как бы Керберос кому чего не откусил
29 май 15, 13:34    [17706297]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Glory
пропущено...

Остапа несло (с) 12ть стульев


Как бы Керберос кому чего не откусил

Да все уже всё поняли.
Я уже лично заканчиваю деинсталяцию последнего MSSQL и уничтожаю последний его дистрибутив.
29 май 15, 13:35    [17706312]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
пропущено...


Как бы Керберос кому чего не откусил

Да все уже всё поняли.
Я уже лично заканчиваю деинсталяцию последнего MSSQL и уничтожаю последний его дистрибутив.


А я пока дистрибутив 2016 закачаю. А то тут чего-то все желают на 2000 работать.
29 май 15, 13:38    [17706330]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
А я пока дистрибутив 2016 закачаю.

А зачем ? Есть же SSIS !
29 май 15, 13:39    [17706346]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
А я пока дистрибутив 2016 закачаю.

А зачем ? Есть же SSIS !


А к каким 12 стульям серверам он будет подключаться?
29 май 15, 13:41    [17706361]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Glory
пропущено...

А зачем ? Есть же SSIS !


А к каким 12 стульям серверам он будет подключаться?

Ни к каким. Все сам будет делать. Разве он может ?
29 май 15, 13:43    [17706376]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Я тут вспомнил, как у нас один товарищ пару лет назад решил воспользоваться мощью SSIS для того чтобы делать JOIN-ы таблиц. При этим надо отметить, что таблицы все были на одном сервере и даже в одной БД. Но SSIS ведь круче чем Database Engine, так что в целях гипер-отпимизиции, он написал кучу простых, как ему казалось запросов, к базовым таблицам, ну и естественно с сортировкой + потом MERGE в SSIS. Я уж не знаю, насколько это стало быстрее работать (потому что просто один SELECT с JOIN-ами товарищ не потрудился написать, чтобы сравнить), но вот только при запуске несколких таких MERGE монстров, выполнение SSIS тупо зависало, да еще и не всегда, а периодически, что немного усложняло поиск проблемы.

Причина же зависаний была вполне банальна. Большое количество одновременных ресурсоемких запросов просто тупо резервировало всю память под сортировки на SQL Server-е, а остальным запросам при этом нужно было ждать ее освобождения. В итоге, если 1 DataFlow был завязан на 4 запроса и один из этих запросов впадал в спячку, то все вешалось намертво, потому что другие 3 запроса не отдавали память пока SSIS не завершится. И никакие буфера по 10000 в памяти тут не помогали, потому как пока запрос "выполняется" сессия память не отдает.
29 май 15, 19:13    [17708266]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Mind
Я тут вспомнил, как у нас один товарищ пару лет назад решил воспользоваться мощью SSIS для того чтобы делать JOIN-ы таблиц. При этим надо отметить, что таблицы все были на одном сервере и даже в одной БД. Но SSIS ведь круче чем Database Engine, так что в целях гипер-отпимизиции, он написал кучу простых, как ему казалось запросов, к базовым таблицам, ну и естественно с сортировкой + потом MERGE в SSIS. Я уж не знаю, насколько это стало быстрее работать (потому что просто один SELECT с JOIN-ами товарищ не потрудился написать, чтобы сравнить), но вот только при запуске несколких таких MERGE монстров, выполнение SSIS тупо зависало, да еще и не всегда, а периодически, что немного усложняло поиск проблемы.

Причина же зависаний была вполне банальна. Большое количество одновременных ресурсоемких запросов просто тупо резервировало всю память под сортировки на SQL Server-е, а остальным запросам при этом нужно было ждать ее освобождения. В итоге, если 1 DataFlow был завязан на 4 запроса и один из этих запросов впадал в спячку, то все вешалось намертво, потому что другие 3 запроса не отдавали память пока SSIS не завершится. И никакие буфера по 10000 в памяти тут не помогали, потому как пока запрос "выполняется" сессия память не отдает.


А у нас вчера пара товарищей стали грузить пару сотен лямом строк через линкед сервера и дело это зависло на несколько часов.

При этом я 500 лямом спокойно промердживал минут за 30-40 . Так что смотрите.

Кстати тема и мои заявления относятся к удалённым серверам. И естественно джойнить таблицы локально через SSIS тем более без индексов, это чушь.

В любом случае -- действуете вы через динкед сервера или через SSIS наличие индексов играет свою роль в обоих случаях.
29 май 15, 19:51    [17708361]     Ответить | Цитировать Сообщить модератору
 Re: какой наиболее оптимальный вариант выборки с удаленного сервера  [new]
это интересно.
Guest
a_voronin
В любом случае -- действуете вы через динкед сервера или через SSIS наличие индексов играет свою роль в обоих случаях.

т.е. выборка это данных или это выборка данных не влияет на роль индексов?
29 май 15, 21:03    [17708561]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3      [все]
Все форумы / Microsoft SQL Server Ответить