Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Качаем данные в пустую новую таблицу, измеряем (скорость перекачки(. Переливаем из нее в рабочую, измеряем (локальный результат скорости вставки). Не думаю, что здесь можно что-то улучшить, если рабочая таблица индексирована, имеет внешние ключи и прочее. OPENQUERY() также сомнителен, равно как и BULK переливы... |
14 апр 14, 21:32 [15881902] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
PavluxaF, попробуйте для теста #2 использовать хинт: INNER REMOTE JOIN Join Hints |
16 апр 14, 20:12 [15892834] Ответить | Цитировать Сообщить модератору |
aleks2
Guest |
Не смешите. Запрос должен длиться 6 миллисекунд или еще меньше. Работайте над собой.
1. Хранимая процедура на " серваке с сиквелом и базой "фактов". Возвращающая рекордсет. 2. Вызов этой процедуры из "базы "измерений" со вставкой во временную таблицу. |
||||||
17 апр 14, 06:15 [15894148] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |