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

Откуда: Екатеринбург
Сообщений: 364
Народ, помогите, скажите куда бежать.

Имеется некая процедура, которая работает с линкед сервером Оракл, уставляет, удаляет записи в таблицах.
На 10-ти инсталляциях она работает нормально, т.е. с приемлимой скоростью. А на 11-й запросы в линкед безбожно тормозят, просто по 30 минут выполняются.

http://support.microsoft.com/default.aspx?scid=kb;en-us;309182 читала. Да запросы написаны неоптимально, но не вижу причин чтоб работало так долго, кол-во изменяемых записей этими запросами невелико, в пределах 30-та записей за раз, данных в таблицах оракл тоже совсем немного, тыщ. по 10.

Вобщем оптимизация будет, но это будет долгий путь, пока наверно можно что-то сделать, чтобы работало хотя бы с той скорость, как в других инсталляциях. Но что? Подскажите куда копать? Может быть какие-то настройки провайдера?
20 авг 09, 12:09    [7560858]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Но что? Подскажите куда копать?


Для начала в сторону сравнения планов выполнения. Особое внимание уделить какие запросы отправляет оптимизатор MS SQL на прилинованный Оракл.
20 авг 09, 12:48    [7561133]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
вот у примеру такой запрос, работал 24 минуты:

Rows Executes StmtText
1 1 delete from OraRadius..RADIUS.USERGROUP where UserName in (select Login from #PDSN_Insert_Parameters )
1 1 |--Remote Delete(SOURCE:(AAADB), OBJECT:("RADIUS"."USERGROUP"))
1 1 |--Table Spool
1 1 |--Nested Loops(Left Semi Join, WHERE:([OraRadius]..[RADIUS].[USERGROUP].[USERNAME]=[#PDSN_Insert_Parameters].[Login]))
9572 1 |--Remote Scan(SOURCE:(AAADB), OBJECT:("RADIUS"."USERGROUP"))
9572 9572 |--Table Spool
1 1 |--Table Scan(OBJECT:([tempdb].[dbo].[#PDSN_Insert_Parameters_0003009630C2]))

удалил одну запись.
20 авг 09, 13:33    [7561551]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
неужто TableSpool самого скуля сколько времени отъедает?
20 авг 09, 13:34    [7561557]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Viktorianka
вот у примеру такой запрос, работал 24 минуты:

Rows Executes StmtText
1 1 delete from OraRadius..RADIUS.USERGROUP where UserName in (select Login from #PDSN_Insert_Parameters )
1 1 |--Remote Delete(SOURCE:(AAADB), OBJECT:("RADIUS"."USERGROUP"))
1 1 |--Table Spool
1 1 |--Nested Loops(Left Semi Join, WHERE:([OraRadius]..[RADIUS].[USERGROUP].[USERNAME]=[#PDSN_Insert_Parameters].[Login]))
9572 1 |--Remote Scan(SOURCE:(AAADB), OBJECT:("RADIUS"."USERGROUP"))
9572 9572 |--Table Spool
1 1 |--Table Scan(OBJECT:([tempdb].[dbo].[#PDSN_Insert_Parameters_0003009630C2]))

удалил одну запись.


Хреново будут работать такие запросы. Стройте строку для in и отправляйте запрос напосредственно линкованному серверу на выполнение.
20 авг 09, 13:38    [7561593]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Viktorianka
неужто TableSpool самого скуля сколько времени отъедает?


А Вы посмотрите, сколь раз он выполнялся и для какого числа записей.
20 авг 09, 13:38    [7561595]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
это при том, что сам селект из оракловой таблицы выполняется около полутора минут, но из оракла то данные тут тянутся один раз и все, насколько я поняла из плана
20 авг 09, 13:40    [7561606]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
pkarklin

Хреново будут работать такие запросы. Стройте строку для in и отправляйте запрос напосредственно линкованному серверу на выполнение.


Это я уже поняла, но работает же в других то местах, значит дело не только запросе
20 авг 09, 13:45    [7561660]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
borin
Member

Откуда: angarsk/msk
Сообщений: 677
Viktorianka,

30-та - это сколько?
20 авг 09, 13:59    [7561764]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
тот же запрос на другой инсталляции:

Rows Executes StmtText
1 1 delete from OraRadius..RADIUS.USERGROUP where UserName in (select Login from #PDSN_Insert_Parameters )
1 1 |--Remote Delete(SOURCE:(RADIUS), OBJECT:("RADIUS"."USERGROUP"))
1 1 |--Table Spool
1 1 |--Hash Match(Right Semi Join, HASH:([#PDSN_Insert_Parameters].[Login])=([OraRadius]..[RADIUS].[USERGROUP].[USERNAME]), RESIDUAL:([OraRadius]..[RADIUS].[USERGROUP].[USERNAME]=[#PDSN_Insert_Parameters].[Login]))
7 1 |--Table Scan(OBJECT:([tempdb].[dbo].[#PDSN_Insert_Parameters_000300B9A07E]))
16882 1 |--Remote Scan(SOURCE:(RADIUS), OBJECT:("RADIUS"."USERGROUP"))

TableSpool тут только один, работает пару секунд, что не так с тем сервером, что он строит совсем неоптимальный план?
20 авг 09, 13:59    [7561766]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Viktorianka
тот же запрос на другой инсталляции:

Rows Executes StmtText
1 1 delete from OraRadius..RADIUS.USERGROUP where UserName in (select Login from #PDSN_Insert_Parameters )
1 1 |--Remote Delete(SOURCE:(RADIUS), OBJECT:("RADIUS"."USERGROUP"))
1 1 |--Table Spool
1 1 |--Hash Match(Right Semi Join, HASH:([#PDSN_Insert_Parameters].[Login])=([OraRadius]..[RADIUS].[USERGROUP].[USERNAME]), RESIDUAL:([OraRadius]..[RADIUS].[USERGROUP].[USERNAME]=[#PDSN_Insert_Parameters].[Login]))
7 1 |--Table Scan(OBJECT:([tempdb].[dbo].[#PDSN_Insert_Parameters_000300B9A07E]))
16882 1 |--Remote Scan(SOURCE:(RADIUS), OBJECT:("RADIUS"."USERGROUP"))

TableSpool тут только один, работает пару секунд, что не так с тем сервером, что он строит совсем неоптимальный план?


А Вы не ввидите, что здесь другой способ объединения?! Попробуйте захиновать его.
20 авг 09, 14:01    [7561780]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
borin
Viktorianka,
30-та - это сколько?


30 штук

borin
Viktorianka
А Вы не ввидите, что здесь другой способ объединения?! Попробуйте захиновать его.

хм, вариант, спасибо, пороем в этом направлении
20 авг 09, 14:04    [7561799]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
переписала запрос
delete ug
   from OraRadius..RADIUS.USERGROUP ug
        inner join #PDSN_Insert_Parameters pi on ug.UserName = pi.Login option(hash join)
теперь это работает 2 минуты вмето 20-ти, это уже большой прогресс, pkarklin спасибо огромное, лучше видимо без передачи запроса на удаленный сервер не сделать, упирается в производительности сети
20 авг 09, 15:11    [7562295]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
но всеж интересно отчего один сервак тащит 16 тыщ записей за 2 секунды, а второй 9 тыщ. за 2 минуты
20 авг 09, 15:18    [7562363]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
однако
delete from OraRadius..RADIUS.USERGROUP where Username in ('SomeTestLogin')
Работает те же 2 минуты, видать удаленный сервак совсем не CollationCompatible, не хочет выполнять сам сравнения со строкой. что то мне совсем непонятно в какую сторону дальше его оптимизировать, OpenQuery нельзя, ибо delete, процедуры на оракле вызывать тоже нельзя...

Народ, покиньте еще идей плиз.
20 авг 09, 15:46    [7562577]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Ну дык этот запрос был тупо передан ораклу на исполнение скорее всего. План посмотрите.
20 авг 09, 15:55    [7562650]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364

delete from OraRadius..RADIUS.USERGROUP where Username in ('SomeTestLogin')

в плане все тот же remote scan и filter, т.е. тянет все на скуль
20 авг 09, 16:05    [7562729]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
дошло как надо писать запросы на delete к ораклу, чтобы фильтровалось на стороне оракла:

delete from OpenQuery(OraRadius, 'select * from RADIUS.USERGROUP where Username like ''Test''')

всем спасибо, вопрос снят
21 авг 09, 09:02    [7564729]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Viktorianka
дошло как надо писать запросы на delete к ораклу, чтобы фильтровалось на стороне оракла:

delete from OpenQuery(OraRadius, 'select * from RADIUS.USERGROUP where Username like ''Test''')

всем спасибо, вопрос снят


Если сервер не ниже 2005 попробовать можно еще и так:

EXECUTE 'DELETE  RADIUS.USERGROUP where Username like ''Test''' AT OraRadius
21 авг 09, 09:04    [7564735]     Ответить | Цитировать Сообщить модератору
 Re: Тормоза LinkedServer-а  [new]
Viktorianka
Member

Откуда: Екатеринбург
Сообщений: 364
pkarklin, к сожалению пока что сервер 2000-й
21 авг 09, 09:12    [7564758]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить