SSIS Консолидация огромного количества данных - предложение - PullRequest
0 голосов
/ 23 августа 2011

Мне нужно объединить данные из 30 баз данных и 20 таблиц. Моей первой попыткой было создать один поток данных для каждой таблицы. Каждый поток данных будет иметь источники 30 дБ, которые получают данные из 1 таблицы из каждого дБ, а затем вставляют в 1 место назначения. Это не работает, потому что не хватает памяти. Я пытался отфильтровать данные, чтобы игнорировать данные, которые не будут использоваться - это не помогло. Эти задачи следует выполнять ежедневно. Whole Consolidation db удаляется, а затем вставляются новые данные, что означает, что огромные объемы данных вставляются ежедневно. У кого-нибудь есть предложения, как справиться с проблемой памяти?

Единственное решение, которое я вижу сейчас, - это создать 20 пакетов. Каждый пакет будет иметь 30 потоков данных. Каждый поток данных будет принимать данные только из одной базы данных. Но опять же, я не знаю, каков порядок исполнения? Будут ли потоки данных одного пакета запускаться одновременно или они будут выполняться один за другим?

EDIT:

Вот как я это сделал ... вот скриншот потока управления: enter image description here

Скриншот потока данных: http://img833.imageshack.us/img833/355/45908206.png

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

Диспетчеру буфера не удалось вызвать выделение памяти для 10484608 байт, но не смог поменять буферы, чтобы уменьшить нагрузку на память. 20 буферы были рассмотрены и 20 были заблокированы. Либо не хватает памяти доступно для конвейера, потому что недостаточно установлено, другие процессы использовали его, или слишком много буферов заблокировано.

Есть предложения?

1 Ответ

2 голосов
/ 23 августа 2011

Вот что я хотел бы предложить, если вы планируете сделать это в SSIS.

  1. Предположим, что у вас есть таблицы A , B , C ..., R , S , T в базах данных DB1 , DB2 ... DB30 . А также ваша база данных консолидации в MainDB .

  2. Создание пакета служб SSIS, который будет содержать 1 или более задач потока данных для переноса данных из таблиц в базе данных DB1 в таблицы в базе данных MainDB . Для этого вы можете использовать источник OLEDB для извлечения данных из DB1. Если вам нужно применить некоторые преобразования, вы можете сделать это с помощью соответствующих задач преобразования. Чтобы вставить данные в таблицы назначения, вы можете использовать назначение OLE DB.

  3. Сохранить строку подключения в файле конфигурации пакета (dtsConfig)

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

  5. Вы можете создать 30 заданий SQL в агенте SQL Server, чтобы запланировать ежедневный запуск.

  6. Каждое из заданий SQL будет запускать один и тот же пакет служб SSIS, но использовать соответствующий файл конфигурации для указания на правильную базу данных.

Other options are

  1. Использование Репликация SQL Server . Вам нужен двухэтапный процесс. Усечение данных в MainDB с помощью задания SQL, а затем синхронизация данных между базами данных.

  2. Используйте коммерческие продукты, такие как Redgate или Idera

Надеюсь, что это дает вам представление.

...