2015-12-17 2 views
1

Я новичок в SSIS и я получил эту проблему:Slow/Низкая производительность на SSIS с XML

Я немного более 100.000 XML-файлов, каждый из них около 16kb большой. У них около 200 столбцов и один первичный ключ. Некоторые из них предназначены только для обновления. Я должен заполнить базу данных данными, но для каждого файла для загрузки/обновления требуется около 1,5 секунды. Я использую VS 2015 и MS SQL. Я только хочу создать базу данных в рабочее время, сейчас это займет около 44 часов, что кажется смешным. (После того, что там будет только около 10 XML-файлов в день для обновления.)

Мой SSIS ControlFlow выглядит следующим образом:

enter image description here

Мой SSIS DataFlow выглядит следующим образом: enter image description here

Я не знаю, как лучше добиться производительности.

Что я пробовал: Установку Ole DB = Строки на партию 5000 и использовать быстрые нагрузки

Даже когда я только вставить XML (который заканчивается с ошибкой, поскольку я не обновлять), это требует много время (около 1 секунды на файл).

Любая помощь будет оценена по достоинству.

+0

Проверьте параметры кэширования в вашем преобразовании Lookup: https://msdn.microsoft.com/en-us/library/ms141821.aspx Часто он кэширует огромный табл (принимает навсегда) и использует только часть его , или наоборот. – steenbergh

+0

My Lookup сделал полный кеш, изменил его на отсутствие кеша, но время все равно остается прежним. – marS

+0

Честно говоря, выполнение 100 000 чтений на очень маленьких файлах сопровождается значительными накладными расходами. Я боюсь, что вы застряли в этой ситуации, так как ... Doing file i/o работает медленно. – steenbergh

ответ

2

Я только что делал что-то подобное, и я нахожу ту же проблему с накладными расходами. Я думал, что поделюсь своей единственной работой - параллельной обработкой.

Итак, сначала выясните, сколько ядер вашего сервера доступно. Правило большого пальца состоит в том, что вы можете иметь один процесс на ядро.

Затем вы можете сделать папку Входящие для каждого ядра ваша машина имеет (если у вас есть четыре ядра):

  • Входящие 1
  • Входящие 2
  • Входящие 3
  • Входящие 4

Затем зайдите в свой SSIS, где у вас есть цикл foreach в потоке управления и четыре раза копируйте этот процесс, но не подключайте их (th это способ, которым они управляются индивидуально).

Наконец, зайдите в каждый цикл foreach и отредактируйте каждый, чтобы он переходил из другого почтового ящика.

Вам нужно явно вырезать и вставлять файлы в каждый почтовый ящик, но он будет запускать четыре потока данных, которые делают то же самое параллельно. т. е. вы должны загрузить четыре файла в то же время, что и раньше, чтобы загрузить их.

Смежные вопросы