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

Откуда: Москва
Сообщений: 9405
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

Откуда: Москва
Сообщений: 9405
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

Откуда: Москва
Сообщений: 9405
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

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

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

Откуда: Москва
Сообщений: 9405
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

Откуда: Москва
Сообщений: 9405
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

Откуда: Москва
Сообщений: 9405
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]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить