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

Откуда: СПб
Сообщений: 126
Доброго времени суток!

Проблема в следующем.
Есть сервак. На нем крутиться сиквел в базой "измерений". Есть другой сервак с сиквелом и базой "фактов".
(ТЕСТ 1)
Допустим мы подключаемся к серверу 2 и выбираем любой факт. Далее подключаемся к серверу и запрашиваем все измерения данного факта. Запрос длиться 6 секунд все ОК. Стоит оговориться: в таблице измерений индексы оптимизированы под вышеуказанные запросы.
(ТЕСТ 2)
Теперь мы выполняем все тоже самое не ручками, а запросом на LINKED SERVER запрос выполняется за 30 секунд. Execution plan превращается в REMOTE QUERY.
(ТЕСТ 3)
Изголяюсь дальше. Создаю на сервере 1 (измерений) хранимую процедуру, возвращающую измерения по данному факту и вставляющую из в сервер 2. Ставлю для LINKED SERVER RPC = true и находясь на сервере 2 выполняю EXEC [LINKED_SERVER].[DATABASE].[SCHEMA].[STORED_PROCEDURE] --- запрос выполняется 29 секунд

(все измерения времени выполнения проводились несколько раз)
Насколько я понимаю в тесте 2 ( предположительно ) не кешируется execution plan. Также может не обновляться статистика??? За счет этого запрос выполняется долго
В тесте 3 --- переливка большого количества записей методом PUSH (запрос выполняется шиворот навыворот) разворачивается в последовательную вставку на принимающем сервере (из-за этого долго)

Еще может быть долго из-за внутренних механизмов проверки соединения.(использую name pipe)
Мой вопрос в следующем:
Как оптимизировать запрос?? по времени выполнения.


За ранее благодарю
14 апр 14, 19:40    [15881549]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в LINKED SERVER  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 9161
Качаем данные в пустую новую таблицу, измеряем (скорость перекачки(. Переливаем из нее в рабочую, измеряем (локальный результат скорости вставки).
Не думаю, что здесь можно что-то улучшить, если рабочая таблица индексирована, имеет внешние ключи и прочее.
OPENQUERY() также сомнителен, равно как и BULK переливы...
14 апр 14, 21:32    [15881902]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в LINKED SERVER  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
PavluxaF,

попробуйте для теста #2 использовать хинт: INNER REMOTE JOIN

Join Hints
16 апр 14, 20:12    [15892834]     Ответить | Цитировать Сообщить модератору
 Re: INSERT в LINKED SERVER  [new]
aleks2
Guest
PavluxaF
Запрос длиться 6 секунд

PavluxaF
в таблице измерений индексы оптимизированы под вышеуказанные запросы.


Не смешите. Запрос должен длиться 6 миллисекунд или еще меньше.
Работайте над собой.

PavluxaF
Как оптимизировать запрос?? по времени выполнения.

1. Хранимая процедура на " серваке с сиквелом и базой "фактов". Возвращающая рекордсет.
2. Вызов этой процедуры из "базы "измерений" со вставкой во временную таблицу.
17 апр 14, 06:15    [15894148]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить