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

Откуда:
Сообщений: 341
-- вот так - 20 секунд
SELECT * FROM OPENQUERY([192.168.21.6], 'SELECT COUNT(*) from MyServer.dbo.MyTable')


-- вот так - 40 секунд

SELECT COUNT(*) FROM [192.168.1.6].MyServer.dbo.MyTable
14 ноя 11, 09:37    [11591134]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
Users
Member

Откуда:
Сообщений: 341
Пардон, конечно же, сервер и там и там, один и тот же, вот так правильно.

-- вот так - 20 секунд
SELECT * FROM OPENQUERY([192.168.21.6], 'SELECT COUNT(*) from MyServer.dbo.MyTable')


-- вот так - 40 секунд

SELECT COUNT(*) FROM [192.168.21.6].MyServer.dbo.MyTable
14 ноя 11, 09:39    [11591137]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Планы сравните.
14 ноя 11, 09:52    [11591191]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
Users
Пардон, конечно же, сервер и там и там, один и тот же, вот так правильно.

-- вот так - 20 секунд
SELECT * FROM OPENQUERY([192.168.21.6], 'SELECT COUNT(*) from MyServer.dbo.MyTable')


-- вот так - 40 секунд

SELECT COUNT(*) FROM [192.168.21.6].MyServer.dbo.MyTable


Потому что OpenQuery исполняет запрос на удаленном сервере и тащит только результат.
А линк тащит все к вам на сервер и выполняет это локально.
Еще более подробно. OpenQuery выполняет count на удаленном сервере и тащит по сети только скалярную переменную. А Линкед Сервер тащит по сети все данные и делает агрегацию на локале.
14 ноя 11, 10:33    [11591348]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
bebop
Member

Откуда:
Сообщений: 120
так называемые pass-through queries (в вашем случае это первый пример) всегда быстрее работают, чем тот же самый код через 4х частное имя объекта.

Линкед-сервер в первом случае практически не участвует в процессе, а во втором случае всегда добавляет существенный оверхэд.
14 ноя 11, 11:59    [11591919]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
Users
Member

Откуда:
Сообщений: 341
gds
Users
Пардон, конечно же, сервер и там и там, один и тот же, вот так правильно.

-- вот так - 20 секунд
SELECT * FROM OPENQUERY([192.168.21.6], 'SELECT COUNT(*) from MyServer.dbo.MyTable')


-- вот так - 40 секунд

SELECT COUNT(*) FROM [192.168.21.6].MyServer.dbo.MyTable


Потому что OpenQuery исполняет запрос на удаленном сервере и тащит только результат.
А линк тащит все к вам на сервер и выполняет это локально.
Еще более подробно. OpenQuery выполняет count на удаленном сервере и тащит по сети только скалярную переменную. А Линкед Сервер тащит по сети все данные и делает агрегацию на локале.


Полагаю, что не совсем так. Там таблица на миллионы строк, если бы по сети тащились все данные через выделенку на 64К - все бы умерло.
14 ноя 11, 12:23    [11592069]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
Users
Member

Откуда:
Сообщений: 341
bebop
так называемые pass-through queries (в вашем случае это первый пример) всегда быстрее работают, чем тот же самый код через 4х частное имя объекта.

Линкед-сервер в первом случае практически не участвует в процессе, а во втором случае всегда добавляет существенный оверхэд.


А можно подробней, если не затруднит? Может, ссылка какая есть? За счет чего оно быстрей?
14 ноя 11, 12:25    [11592093]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Users
Полагаю, что не совсем так. Там таблица на миллионы строк, если бы по сети тащились все данные через выделенку на 64К - все бы умерло.

Что мешает проверить свои предположения через анализ плана выполнения ?
14 ноя 11, 12:26    [11592094]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
komrad
Member

Откуда:
Сообщений: 5735
Users
Полагаю, что не совсем так. Там таблица на миллионы строк, если бы по сети тащились все данные через выделенку на 64К - все бы умерло.


в поддержку

цитата
When possible, SQL Server pushes relational operations such as joins, restrictions, projections, sorts, and group by operations to the OLE DB data source. SQL Server does not default to scanning the base table into SQL Server and performing the relational operations itself. SQL Server queries the OLE DB provider to determine the level of SQL grammar it supports, and, based on that information, pushes as many relational operations as possible to the provider.


тынц
14 ноя 11, 12:30    [11592143]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
komrad
Member

Откуда:
Сообщений: 5735
+ еще немного с примерами

тынц №2
14 ноя 11, 12:31    [11592150]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
bebop
Member

Откуда:
Сообщений: 120
Users
bebop
так называемые pass-through queries (в вашем случае это первый пример) всегда быстрее работают, чем тот же самый код через 4х частное имя объекта.

Линкед-сервер в первом случае практически не участвует в процессе, а во втором случае всегда добавляет существенный оверхэд.


А можно подробней, если не затруднит? Может, ссылка какая есть? За счет чего оно быстрей?


Ссылки не дам - это наблюдение чисто из практического опыта.
Планы запросов, которые я видел, которые строят линкед-сервера (во 2м примере) чудовищны, даже для случая когда связываешь 2 MS SQL сервера. Если второй сервер - оракл - ситуация ещё хуже.

Для себя я это объясняю тем, что:

в 1 случае:
запрос выполняет удалённый сервер, который обладает всей возможной полнотой информации о запрашиваемых данных (статистика, индексы)
+ используется "родной" оптимизатор запроса для этих специфичных данных


Во 2 случае:
запрос выполняет локальный сервер, который не обладает достаточной информацией о запрашиваемых данных
+ используется универсальный оптимизатор запросов встроенный в линкед-сервер
+ с точки зрения теории, алгоритмы соединения для удалённых данных другие ,чем для локальных данных
14 ноя 11, 14:02    [11592983]     Ответить | Цитировать Сообщить модератору
 Re: чайниковское: почему большая разница в выполнении запроса на LinkedServer?  [new]
Users
Member

Откуда:
Сообщений: 341
bebop
Users
пропущено...


А можно подробней, если не затруднит? Может, ссылка какая есть? За счет чего оно быстрей?


Ссылки не дам - это наблюдение чисто из практического опыта.
Планы запросов, которые я видел, которые строят линкед-сервера (во 2м примере) чудовищны, даже для случая когда связываешь 2 MS SQL сервера. Если второй сервер - оракл - ситуация ещё хуже.

Для себя я это объясняю тем, что:

в 1 случае:
запрос выполняет удалённый сервер, который обладает всей возможной полнотой информации о запрашиваемых данных (статистика, индексы)
+ используется "родной" оптимизатор запроса для этих специфичных данных


Во 2 случае:
запрос выполняет локальный сервер, который не обладает достаточной информацией о запрашиваемых данных
+ используется универсальный оптимизатор запросов встроенный в линкед-сервер
+ с точки зрения теории, алгоритмы соединения для удалённых данных другие ,чем для локальных данных



Кому (может, и вам) будет интересно: вот ссылка по этой теме, там в самом низу есть информация именно про openquery
https://www.sql.ru/blogs/somewheresomehow/999
16 ноя 11, 12:28    [11604722]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить