У меня есть большой (~ 50 ГБ, ~ 300 млн строк) разделенный вкладкой файл, который я хочу импортировать в таблицу SQL Server со столбцами: char(10), varchar(512), nvarchar(512), nvarchar(512)
.
Для массового импорта он занимает около дня, используя класс T-SQL, SSIS или C # SqlBulkCopy .
Есть ли более быстрый способ загрузить эти данные?
Или может быть какое-то условие, замедляющее его, которое я могу удалить или изменить?
Если вы вставляете в существующую таблицу, удалите все индексы перед импортом и заново создайте их после импорта.
Если вы используете SSIS, вы можете настроить размер партии и фиксации.
Убедитесь, что на сервере имеется достаточная память для такой большой загрузки данных.
Выполните операцию загрузки на локальном сервере (скопируйте файл локально, не загружайте по сети).
Настройте параметры автозапуска целевой базы данных и журнала транзакций на разумную величину, например, несколько сотен МБ фрагментов за один раз (по умолчанию обычно увеличивается на 1 МБ для файла основных данных .mdf). Операции роста медленные / дорогие, поэтому вы хотите свести их к минимуму.
Убедитесь, что ваши данные и файлы журналов находятся на быстрых дисках, предпочтительно на отдельных LUN. В идеале вы хотите, чтобы ваш файл журнала на зеркальном отдельном LUN из вашего файла журнала (вам может потребоваться поговорить с администратором хранилища или поставщиком хостинга для опций).
Я только что провел последние несколько недель, сражаясь с оптимизацией очень большой нагрузки. BULK INSERT - самый быстрый способ, который я нашел с BCP, в отличие от SSIS или TSQL Bulk Insert, но есть вещи, которые вы можете сделать, чтобы настроить это.