Spool / Eager Spool - PullRequest
       17

Spool / Eager Spool

3 голосов
/ 20 марта 2009

У меня есть запрос

select * into NewTab from OpenQuery(rmtServer, 'select c1, c2 from rmtTab') 

Когда я смотрю на план выполнения, он говорит мне, что выполняет «Катушку таблиц / Eager Spool», которая «сохраняет данные во временной таблице для оптимизации перемоток»

Теперь я не ожидаю никаких перемоток. Если происходит какой-либо сбой, я могу просто бросить newTab и начать все сначала.

Можно ли как-то помешать ему сохранить данные во временной таблице?

Ответы [ 2 ]

4 голосов
/ 21 марта 2009

Вероятно, это и есть открытый запрос.

Нет информации о количестве строк, нет статистики, ничего нет, поэтому SQL Server будет просто буферизовать результаты, чтобы позволить ему оценивать более поздние биты, которые я подозреваю. Это основная идея.

Я бы предложил разделить создание и заполнение newtab.

Кстати, перемотка - это не откат. Перемотка не имеет ничего общего с безопасностью транзакции. Это SQL Server, ожидающий повторного использования строк. Что правильно, потому что openquery - это черный ящик.

Посмотрите в нижней части этой простой статьи Talk для перемоток. У вас есть «Удаленный запрос».

Редактировать

Исходя из того, что я нашел только на прошлой неделе, посмотрите на sp_tableoption .

При использовании с OPENROWSET навалом поставщик набора строк для импорта данных в таблица без индексов, TABLOCK позволяет несколько клиентов для одновременной загрузки данные в таблицу назначения с оптимизированная регистрация и блокировка

Попробуйте TABLOCK на своем заполнении. Мы развлеклись с разработчиком клиента, использующим .net SQLBulkCopy, который дал очень плохую производительность.

Также это от, Кален Делани

Это не интуитивно понятно.

1 голос
/ 20 марта 2009

сначала создайте NewTab, а затем вставьте в ... из openquery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...