Чтобы дать некоторый контекст, в настоящее время я запускаю экземпляр SQL Server 2012 на Amazon RDS, и мне пришлось переходить к более крупному экземпляру уже дважды. Первый раз, когда SQLAzureMW был в пути, но в то время ни одна таблица не была значительно большой. Во второй раз SQLAzureMW всегда запустил исходный сервер в команде bcp с большими таблицами (несколько более 5 ГБ). Аналогичным образом также был запущен мастер импорта / экспорта SSIS. Я обнаружил, что исходный сервер всегда был проблемой, поэтому я попытался увеличить класс экземпляра от m1.medium до m1.xlarge, но безрезультатно, исходный сервер все еще всегда тайм-аут, прежде чем сделать значительный прогресс на больших таблицах.
В конце концов я закончил писать свою собственную .NET-программу, которая просто запускала «SELECT * FROM [table] ORDER BY [id] OFFSET {0} ROWS» в больших исходных таблицах и подталкивала результаты в SQLBulkCopy на целевом сервере. Снова исходный сервер тайминг неоднократно, но я завернул операторы try и catch в цикле, которые просто возобновили бы запрос из последней точки, где SQLBulkCopy. При этом я не очень в восторге от этого решения.
Я рассматриваю возможность создания решения вокруг класса Microsoft.SqlServer.Management.Smo.Transfer, но я боюсь, что могут возникнуть те же проблемы с отсутствием восстановления из сломанного исходного соединения.
Я бы предпочел, чтобы это было из коробки, так как SQLAzureMW был до того, как таблицы стали слишком большими, и я ожидал бы, что будет работать мастер импорта импорта SSIS. Там должен быть лучший путь.
Мы столкнулись с аналогичной ситуацией: запуск SQLAZureMW на сервере Windows Server 2012 EC2, подключающемся к экземпляру RDS SQL Server 2012. Поддержка AWS предложила следующие изменения в нашем экземпляре EC2 и, похоже, решила все наши проблемы:
Инструкции от AWS:
Ниже приведены действия по отключению выгрузки TCP: переход к свойствам сетевого адаптера Citrix PV. Нажмите «Настроить» Перейти к «Дополнительно». Отключите все следующие свойства: «Выгрузка» большого количества выходов (IPv4), «Большая отправка» версии 2 (IPv4), TCP Выгрузка выгрузки контрольной суммы (IPv4), выгрузка контрольной суммы UDP (IPv4)
Затем в качестве последнего шага выполните следующую команду из командной строки:
netsh int ip set global taskoffload=disabled netsh int tcp set global chimney=disabled netsh int tcp set global rss=disabled netsh int tcp set global netdma=disabled