Оптимизация назначения плоского файла SSI в OLE DB - PullRequest
0 голосов
/ 16 мая 2018

Относительно новый для SSIS, но я создал пакет для загрузки нескольких сгруппированных плоских файлов (из дампа данных Progress) в соответствующие промежуточные таблицы SQL.Каждая из групп плоских файлов представляет исходную логическую таблицу и существует в виде нескольких плоских файлов с одним и тем же именем таблицы с добавленным добавлением int (например, matdb-1, matdb-2 и т. Д.).Каждый плоский файл содержит ограниченные данные с максимумом 500 000 строк.

У меня есть контейнеры циклов Foreach с задачей потока данных, содержащей источник плоского файла в назначение OLE DB с использованием «Таблица или представление - быстрая загрузка», «Проверить«Контрастность» снята, а затем задача «Файловая система» для перемещения обработанного файла в архив.

Самая большая таблица (в настоящее время 25,2 миллиона строк) занимает в среднем 6,5-7 минут на обработку каждого файла, и я хочу получить этовниз, предпочтительно не менее чем на половину.Таблица назначения состоит из 2 столбцов типа int, 30 столбцов varchar (max), 6 столбцов varchar (100) и 1 столбца varchar (18).

Я прочитал, попробовал и протестировал несколько статей для внесения поправок вDefaultBufferMaxRows / DefaultBufferSize, установив для AutoAdjustBufferSize значение True и изменив «Rows per batch» / «Максимальный размер фиксации вставки» в редакторе назначения OLE DB как средство повышения производительности по умолчанию, но все, что я пробовал, только увеличило время обработкии я не могу найти более эффективное решение.

Любые вопросы и предложения приветствуются, и я постараюсь ответить соответствующим образом.Спасибо.

1 Ответ

0 голосов
/ 16 мая 2018

На всякий случай ускорение с SSIS не удалось ... вот мой подход sql:

declare @i int = 1;
declare @maxFileNo int = 6;

declare @filenamePattern nvarchar(99) = 'matdb-';
declare @sqlPattern nvarchar(999) = 'insert stageTable select * from OPENROWSET(BULK ''__fileName__'', formatfile = ''formatFile.fmt'') a';
declare @sql nvarchar(999);

while @i <= @maxFileNo begin
    set @sql = REPLACE(@sqlPattern, '__fileName__', @filenamePattern + CAST(@i as nvarchar(2)));
    exec(@sql);
    set @i += 1;
end 
...