Повышение производительности для загрузки 6,5 миллионов записей из плоского файла в пункт назначения OleDb (т. Е. Таблицу базы данных)

#sql-server #visual-studio #ssis #etl #ssis-2019

#sql-server #visual-studio #ssis #etl #ssis-2019

Вопрос:

Сценарий

Я использую Visual Studio 2019 для загрузки данных из плоских файлов (текстовых файлов) в таблицы базы данных SQL Server 2019. Это промежуточные таблицы.

У меня есть 10 текстовых файлов, и мне нужно создать по одному пакету на файл для загрузки данных в 10 разных таблиц (промежуточных), выделенных для каждого файла.

Это требование моей задачи.

Я могу сделать это успешно. Все пакеты имеют довольно быстрое время выполнения, за исключением одного, в котором текстовый файл содержит около 6,5 миллионов записей, а время выполнения пакета для загрузки данных в таблицу базы данных составляет 2 минуты 30 секунд.

Для этой задачи я использовал задачу потока данных, которая содержит:

  1. Источник плоского файла — содержит файл, из которого должны быть загружены данные.
  2. Пункт назначения OLE DB — для таблицы базы данных, в которую должны быть загружены данные. (прилагаемый скриншот для справки)

введите описание изображения здесь

Чего я хочу достичь?

Я хочу повысить производительность этого пакета, чтобы максимально сократить время выполнения.

Комментарии:

1. Я попробовал использовать сбалансированный распределитель данных, и теперь прошедшее время составляет 50 секунд. Но мне пришлось создать 30-32 ветки для назначения OLE DB, что неудобно. Должен быть лучший способ сделать это. Пожалуйста, сообщите.

Ответ №1:

Если вы хотите вставить плоский файл в таблицу SQL Server без каких-либо преобразований. Вы можете использовать задачу МАССОВОЙ ВСТАВКИ SSIS. Или просто вы можете использовать команду массовой вставки SQL. Пример:

 BULK INSERT AdventureWorks2012.Sales.SalesOrderDetail
   FROM 'f:ordersitems.csv'
   WITH
      (  
         FIELDTERMINATOR =';'
         , ROWTERMINATOR ='n'
      );
 

Ответ №2:

Большое спасибо за ваши советы и предложения. Это мне очень помогло.

Я выполнил итерации для различных комбинаций свойств потока данных, таких как DefaultBufferSize, DefaultBufferMaxRows и количество выходных путей из «Сбалансированного распределителя данных» (скриншот прилагается).). Теперь пакет выполняется за 15 секунд. введите описание изображения здесь