SSIS - снова не хватает памяти - PullRequest
6 голосов
/ 12 сентября 2011

У меня есть приблизительно 25 баз данных, которые мне нужно объединить в 1 базу данных.Сначала я попытался создать пакет ssis, который бы копировал все данные из каждой таблицы в одно место, но затем я получил ошибку:

Информация: диспетчеру буфера не удалось вызвать выделение памяти для 10485760 байт, но былоНевозможно заменить любые буферы, чтобы уменьшить нагрузку на память.1892 буфера были рассмотрены и 1892 были заблокированы.Либо недостаточно памяти доступно для конвейера, потому что недостаточно установлено, другие процессы использовали его, либо слишком много буферов заблокировано.

Тогда я понял, что это не очень хорошая идея, и мне нужновставлять только новые записи и обновлять существующие.После этого я попробовал эту опцию:

  • Получить список всех конн.строки
  • foreach db, копировать новые записи и обновлять существующие (те, которые необходимо обновить, копировать из исходной таблицы во временную, удалять их из места назначения и копировать из временной таблицы в таблицу назначения)

enter image description here

Вот как выглядит задача потока данных

enter image description here

В некоторых случаях поток данных обрабатывает более миллиона строк.НО, я все еще получаю ту же ошибку - не хватило памяти.

В диспетчере задач ситуация следующая:

enter image description here enter image description here

Я должен отметитьчто на этом же сервере реплицируется 28 баз данных, и когда этот пакет не запущен, сервер sql по-прежнему использует более 1 ГБ памяти.Я читал, что это нормально, но теперь я не уверен ...

Я установил исправление для SQL Server, которое я нашел в этой статье: http://support.microsoft.com/kb/977190 Но это не такt help ... Я что-то делаю не так или это просто так, и я полагаю, что можно найти обходное решение?

Спасибо,
Ile

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Вы можете столкнуться с проблемами с памятью, если для преобразования «Уточняющий запрос» установлено значение «Полный кэш». Из того, что я видел, Merge Join работает лучше, чем преобразование Lookup, если число строк превышает 10 миллионов.

Взгляните на следующее, где я объяснил различия между объединением слиянием и преобразованием «Уточняющий запрос».

В чем различия между преобразованиями слияния и поиска в службах SSIS?

2 голосов
/ 15 сентября 2011

Я нашел решение, и проблема была в SQL Server - он занимал слишком много памяти.По умолчанию максимальный объем памяти сервера был установлен на 2147483647 (это значение по умолчанию).Так как мой сервер имеет 4 ГБ ОЗУ, я ограничил это число до 1100 МБ.С тех пор проблем с памятью не было, но все же мои задачи выполнялись очень медленно.Проблема была в использовании Lookup.По умолчанию Lookup выбирает все из таблицы Lookup - я изменил это и выбрал только столбцы, которые мне нужны для поиска - он несколько раз ускорил процесс.

Теперь весь процесс консолидации занимает около 1:15 ч.

...