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

Откуда: Москва
Сообщений: 187
Добрый день.
При удалении и при вставке в таблицу на Linked Server:
  
delete A
  from [LinkedServer1].Base1.dbo.Table1 A
 inner join #TmpTable B on A.ID = B.ID 

insert into [LinkedServer1].Base1.dbo.Table1 (....)
select ...
  from #TmpTable

процесс очень затягивается и в profiler на linked сервере появляется куча строк вида:
 
exec sp_cursor ...
exec sp_cursorfetch ...

Такое ощущение, что записи вставляются/удаляются по одной в каком то курсоре.

Как ускорить процесс?
30 сен 09, 13:38    [7724558]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
план выполнения можно увидеть?
30 сен 09, 13:51    [7724666]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
Не знаю, чем план может помочь. Если все выполнять на одном сервере - работает быстро.
Таблица #TmpTable - большая, соответственно удалений, вставок - много.

Для delete.
Что то типа такого:

К сообщению приложен файл. Размер - 0Kb
30 сен 09, 14:11    [7724775]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
Glory
Member

Откуда:
Сообщений: 104760
delete A
  from [LinkedServer1].Base1.dbo.Table1 A
 inner remote join #TmpTable B on A.ID = B.ID 
30 сен 09, 14:11    [7724781]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
Нагнал. В Clustered Index Scan - таблица #TmpTable.
30 сен 09, 14:12    [7724787]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
Glory
Member

Откуда:
Сообщений: 104760
dasbot
Не знаю, чем план может помочь. Если все выполнять на одном сервере - работает быстро.

И когда быстро план такой же что ли остается ?
30 сен 09, 14:14    [7724795]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
С
inner remote join
то же самое.


Glory
dasbot
Не знаю, чем план может помочь. Если все выполнять на одном сервере - работает быстро.

И когда быстро план такой же что ли остается ?


Да нет. Обычный план. Удаление и селекты с одного же сервера.
30 сен 09, 14:24    [7724847]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
а вариант TRUNCATE а потом втавка нужных значений невозможен?
30 сен 09, 14:32    [7724888]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
Glory
Member

Откуда:
Сообщений: 104760
dasbot
С
inner remote join
то же самое.

Что тоже самое ? План или нечто другоет ?
30 сен 09, 14:48    [7725004]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
Glory
dasbot
С
inner remote join
то же самое.

Что тоже самое ? План или нечто другоет ?


План приблизительно такой же. Добавился Stream Aggregate.
Время выполнения такое же. В profiler те же строки


ТАРАКАН
а вариант TRUNCATE а потом втавка нужных значений невозможен?

Невозможен.
30 сен 09, 15:01    [7725074]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
попробуй:
http://dev.net.ua/blogs/denisreznik/archive/2009/05/27/8394.aspx
30 сен 09, 15:19    [7725202]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
ТАРАКАН
попробуй:
http://dev.net.ua/blogs/denisreznik/archive/2009/05/27/8394.aspx


Интересно - но не то.
Проблема в том, что удаление/вставка идет в таблицу на linked сервере. А сами запросы и #TmpTable на другом сервере.

Не смог дождаться удаления порядка 50000 строк из таблицы с 3000000 строк


Если запустить так (Table1, #TmpTable - на одном сервере) - то все ок (около 10 секунд).
delete A
  from Table1 A
 inner join #TmpTable B on A.ID = B.ID
30 сен 09, 16:05    [7725575]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
а выполнять на линк сервере нельзя?
30 сен 09, 16:12    [7725625]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
ТАРАКАН
а выполнять на линк сервере нельзя?

Нет. Все расчеты (заполнение #TmpTable) идут на основном сервере.
30 сен 09, 16:27    [7725738]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
ТАРАКАН
Member

Откуда:
Сообщений: 439
dasbot
ТАРАКАН
а выполнять на линк сервере нельзя?

Нет. Все расчеты (заполнение #TmpTable) идут на основном сервере.

а нельзя эти расчеты вставить не в временную таблицу?
1) произвести расчет
2)создать таблицу с данными на линк сервере
3) join и удаление на линк сервере.
30 сен 09, 16:56    [7726010]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
ТАРАКАН

а нельзя эти расчеты вставить не в временную таблицу?
1) произвести расчет
2)создать таблицу с данными на линк сервере
3) join и удаление на линк сервере.

У меня процедура на основном сервере.
Если join и удаление на линк сервере можно выполнить из этой процедуры - то можно.
Но конечно не хотелось бы использовать постоянную таблицу.
30 сен 09, 17:14    [7726132]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
somebody
Member

Откуда: Москва
Сообщений: 708
@@version обоих серверов приведите...
А также - как именно привязан сервер (провайдер).
1 окт 09, 10:51    [7728401]     Ответить | Цитировать Сообщить модератору
 Re: Linked Server. Insert, Delete  [new]
dasbot
Member

Откуда: Москва
Сообщений: 187
Главный сервер
Microsoft SQL Server 2005 - 9.00.3239.00 (X64) Apr 9 2008 22:41:28
Линкед сервер
Microsoft SQL Server 2005 - 9.00.4035.00 (X64) Nov 24 2008 16:17:31

Провайдер: Microsoft OLE DB Provider for SQL Server


В общем проблему с удалением решил через курсор по таблице #TmpTable. В курсоре получаю @ID
В курсоре удаляю записи процедурой на линкед сервере
execute [LinkedServer1].Base1.dbo.delFromTable1 @ID
- отрабатывает за приемлемое время.

Проблемы со вставкой на самом деле не было.
1 окт 09, 15:45    [7730416]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить