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

Откуда:
Сообщений: 7
Приветствую, коллеги.
Есть такая проблема открывают в курсором запрос через openquery с удалённого сервера:
declare c cursor local fast_forward forward_only read_only for select * from openquery([QWERTY], 'select и т.д.')
open c

Очень долго думает. Можно как-нибудь его заставить быстрее открывать курсор?
Спасибо.
7 дек 15, 09:49    [18522221]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
Propindos
Очень долго думает. Можно как-нибудь его заставить быстрее открывать курсор?
Только курсор? Сам то запрос быстро выполняет?
7 дек 15, 09:50    [18522237]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Propindos
Member

Откуда:
Сообщений: 7
alexeyvg,

Запрос возвращает много записей (миллионы).
Если написать так:
declare c cursor local fast_forward forward_only read_only for select top 100 * from openquery([QWERTY], 'select и т.д.')
open c

Отработает быстро.
Не понятно что происходит, если ему top указать.
7 дек 15, 09:55    [18522269]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Propindos
Member

Откуда:
Сообщений: 7
* "top не указать" кончено.
7 дек 15, 09:56    [18522284]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Propindos
Member

Откуда:
Сообщений: 7
Кажется я понял - он пишет в tempdb. Фактически неявно формирует временную таблицу.
7 дек 15, 09:58    [18522305]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
Propindos
Не понятно что происходит, если ему top не указать.
Это можно посмотреть в профайлере.
Наверное, читает все данные, поэтому и медленно.
7 дек 15, 10:12    [18522417]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31783
Propindos
Кажется я понял - он пишет в tempdb. Фактически неявно формирует временную таблицу.
Ну в общем да. Стратегии выполнения курсора две - либо он лочит таблицу, и читает по мере выполнения fetch, либо читает в временные структуры, и потом берёт данные оттуда.
7 дек 15, 10:14    [18522430]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Propindos
Member

Откуда:
Сообщений: 7
alexeyvg,

Получается залочить в этой ситуации он не может. Жаль, там просто большой объем данных, и все это переливание из удаленной базы во временную, потом опять ее вычитывать, обрабатывать и записывать уже в целевую съедает очень много времени на ввод/вывод.
7 дек 15, 10:29    [18522512]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Propindos,

как курсор ускорит импорт данных?
7 дек 15, 11:26    [18522913]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
nizamovich
Member

Откуда: Москва
Сообщений: 116
Propindos,

источник данных один ?
7 дек 15, 11:33    [18522979]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Propindos
Member

Откуда:
Сообщений: 7
Владислав Колосов,

В общем никак, только мне их потом все равно обрабатывать.
Там много баз, одинаковой структуры (1с). Тестировал на ограниченном объеме, оказалось, что с курсором не так уж медленно. Видимо все таки придется буферизировать сначала (хотелось сразу с источника брать и обрабатывать). Потом уже буду мерять что быстрее.
7 дек 15, 11:59    [18523254]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Propindos,

а если вытянуть только ID? А сами данные дёргать по одной записи?
8 дек 15, 15:54    [18530624]     Ответить | Цитировать Сообщить модератору
 Re: Курсор по openquery  [new]
Propindos
Member

Откуда:
Сообщений: 7
Шыфл,

Боюсь будет все ещё медленнее. В общем получилось слить в буферную таблицу я почти 7 млн. слегка "потриманных" записей всего за 5.5 минут. а дальше буду уже крутить у себя.
9 дек 15, 15:33    [18535982]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить