2016-10-18 1 views
0

Мне нужно выполнить задачу, в которой у нас есть таблица с 19 столбцами с текстовым типом данных. Я хочу удалить эти столбцы из этой исходной таблицы и переместить эти столбцы в новую таблицу с типом данных как varchar (max). Исходная таблица имеет в настоящее время 30 тыс. Строк (с данными типа текстовых данных). В конечном итоге это увеличится, так как клиент будет использовать базу данных для хранения записей. Для передачи этих старых данных я попытался использовать запрос «insert into..select ..», но для переноса этих строк (30k) требуется около 25-30 минут. То же самое происходит и с запросом «Выбрать из .. ..». Я также попытался создать задачу потока данных SSIS для передачи с OLE DB как источником и получателем. Но все же это занимает столько же времени. Я действительно запутался, так как все сообщения через Интернет говорят о том, что SSIS является самым быстрым способом передачи данных. Можете ли вы предложить мне лучший способ улучшить производительность передачи данных с использованием любой техники?Как скопировать 19 миллионов строк, содержащих столбцы типа текстовых данных, быстрее в другую таблицу на сервере sql 2012

Благодаря

+2

Если 30 минут для 19 миллионов рядов, разумная производительность зависит от вашей системы. Что случилось с этим, если это одноразовая задача? Если вам нужно постоянно это делать, я подозреваю, что вам придется пересмотреть свой дизайн. – Filburt

+0

@Filburt Это одноразовая задача, и она занимает 30 минут только для 30 тыс. Строк. Она будет расти в конце концов через 3-4 месяца, когда мы сделаем эту миграцию. У нас есть клиенты на SaaS, и за это время нам, возможно, потребуется Система не работает. Вот почему я думаю, что это лучший способ сделать это. – swapnil

+0

У вас есть триггеры в таблице назначения?, Что бы объяснить это. –

ответ

0

SSIS, вероятно, не быстрее, если источник и пункт назначения находятся в одной и той же базе данных, и процесс SSIS находится на том же поле.

Один из подходов может заключаться в том, чтобы выяснить, где вы тратите время и оптимизируете это. Если вы установили Management Studio на «отбрасывание результатов после выполнения» и запустили только часть вашего запроса, как долго это займет? Если это существенная часть 25-30 минут, то работайте над ее оптимизацией.

Если заявление select оказалось очень быстрым, то все время тратится на вставку, и вам нужно посмотреть на улучшение этой части процесса. Есть несколько вещей, которые вы можете попробовать здесь, прежде чем идти на покупку оборудования; есть ли какие-либо индексы или ограничения (или триггеры!) в целевой таблице, которые можно отбросить на время вставки и вернуть обратно в конце? Можете ли вы поместить базу данных в простой режим?

+0

Я уже поместил базу данных в простой режим, и в таблице назначения нет ограничений и индексов. Что касается выбора запроса, то занимает слишком много времени при выборе только 10 тыс. Строк. Я предполагаю, что это связано с огромными данными в каждом столбце исходной таблицы (каждый столбец имеет текст типа). Что бы вы предложили для этого? – swapnil

+0

Вот план выполнения запроса select для 10000 строк – swapnil

+0

Его принятие 100% времени для таблицы сканирования и общего времени появления составляет около 8 минут – swapnil