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

Откуда:
Сообщений: 6
Замечена такая фича, когда выполняю обычный select с параметрами на LinkedServer (LS) -- выполняется долго, ощущение такое что он сначала тянет всю таблицу из которой происходит выборка на мой сервак и только потом делает фильтр по where.
Попробовал запихать select c параметрами в execute(' ...') строкой -- сработало отлично -- всё залетало, пока передаваемые параметры были числовыми, как тока попытался передать строковый --- опять облом подвисает и на долго.
Индексирование полей в таблице не помогает.
Кто нибудь знает как с этим бороться или хотябы как это объяснить????
Заранее благодарен!
12 ноя 03, 15:35    [414805]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Сделать "там" процу / UDF
12 ноя 03, 15:43    [414832]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
epelepsy
Member

Откуда:
Сообщений: 6
Дело в том, что на удалённом серваке у меня права только на чтение одной таблицы, создавать там процедуры не могу :-(
12 ноя 03, 15:52    [414856]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
Crimean
Member

Откуда:
Сообщений: 13148
sp_executesql не пробовал?
12 ноя 03, 16:06    [414899]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
Glory
Member

Откуда:
Сообщений: 104760
долго, ощущение такое что он сначала тянет всю таблицу из которой происходит выборка на мой сервак и только потом делает фильтр по where.
Очень даже может быть. План выполнения скажет точно.

Попробовал запихать select c параметрами в execute(' ...') строкой -- сработало отлично -- всё залетало, пока передаваемые параметры были числовыми, как тока попытался передать строковый --- опять облом подвисает и на долго.
А как себе ведет запрос с этими же параметрами при выполнении непосредственно на удаленном сервере ? Если так же, то проблема тогда собственно в запросе. Вернее в том, как его выполняет удаленный сервер.
12 ноя 03, 16:35    [415020]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
epelepsy
Member

Откуда:
Сообщений: 6
План выполнения у запросов (со строковыми параметрами или с числовыми) один в один.
На удалённом серваке этот же запрос с параметрами выполняется идеально быстро...
Думал, может дело в несовпадении кодировки, попробовал передавать строковые параметры и в английском варианте -- не помогло...
12 ноя 03, 16:45    [415055]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Я имел в виду нечто такое:

exec [crimean\ls2k].scrooge..sp_executesql N'select * from bills where daydate = @Daydate and Code like @Code', N'@DayDate int, @Code varchar(32)', @DayDate = 35806, @Code = '1[_]1%'


Это гарантировано "там" выполнится :)
И - ИМХО - линкед сервера пока угробище. RPC, которое Билли не обещает поддерживать, - пока рулит. Зато RPC спокойно ходит по линкед серверам, но я пока пользую ремоуты :)
12 ноя 03, 17:07    [415119]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
epelepsy
Member

Откуда:
Сообщений: 6
Спасибо за совет Crimean !
Я пробовал так сделать
но при исполнении кода

DEclare @w VARCHAR(1000), @city INT
set @city=82980
set @w = 'SELECT * FROM sql4all.tourism.dbo.aa_queue where avs_request_id = '+CAST(@city AS VARCHAR(50))
EXECUTE(@w)

Запрос с LinkedServer'a возвращает результат за 1 сек. а при
следующем коде в не зависимости от строкового или числового типа параметра 18 сек.

execute sp_executesql
N'SELECT * FROM sql4all.tourism.dbo.aa_queue where avs_request_id = @city', '@city INT', @city = 82980
Вот такая заморочка!!!
12 ноя 03, 17:33    [415169]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Ты сделал неправильно.

Правильно вот так:

execute sql4all.tourism..sp_executesql N'SELECT * FROM aa_queue where avs_request_id = @city', '@city INT', @city = 82980
12 ноя 03, 17:55    [415217]     Ответить | Цитировать Сообщить модератору
 Re: тормоза при передаче запроса с использованием execute на Linked server  [new]
epelepsy
Member

Откуда:
Сообщений: 6
Thank U Crimean !!!
Действительно zдорово!
Вызов процедуры с удалённого сервера -- всё летает!
(Как я сам то не догадался :-))))
Спасибо!
Благодарен всем кто откликнулся ;-)
13 ноя 03, 10:06    [415849]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить