Оптимизация пакета служб SSIS для миллионов строк с помощью команды «Упорядочить по / отсортировать в SQL» и «Объединить слияние» - PullRequest
3 голосов
/ 26 апреля 2019

Привет! В настоящее время я пытаюсь оптимизировать пакет служб SSIS, когда выполняю операцию Upsert / Delete, которая обрабатывает около 93+ миллионов строк из таблицы в удаленном источнике MariaDB. Таблица также содержит приблизительно 63 столбца.

В настоящее время я использую Sort and Merge Join в своем пакете, но, как я прочитал, некоторые руководства рекомендуют выполнять сортировку на сервере, а не с помощью функции сортировки в SSIS DT, так как это создает нагрузку на Память сервера служб SSIS.

И поскольку в настоящее время я использую это решение в Azure Data Factory, запуск пакета завершается сбоем (чаще всего это время ожидания, хотя я увеличил свойства Time Out как на стороне пакета, так и на фабрике данных Azure).

Каков рекомендуемый способ решения этой проблемы?

Если я правильно понял и, как я уже говорил, я могу пропустить загрузку на сервере SISS, отсортировав DB-Server-Side. Но так как я новичок во всем, что касается SQL и SSIS, я не совсем уверен, как это будет выглядеть в SQL-команде.

Также я думаю о пакетировании, но даже здесь я не уверен, как это будет работать в SSIS.

Что здесь рекомендуется?

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

Я следовал примеру такого типа: Синхронизация табличных данных с помощью объединения слиянием в SSIS

enter image description here

(К вашему сведению: красные значки ошибок присутствуют, потому что я потерял соединение во время скриншота, в противном случае это полностью рабочее решение.)

1 Ответ

2 голосов
/ 26 апреля 2019

У меня есть две рекомендации:

Сортировка на стороне сервера

В OLE DB Source измените режим доступа на команду SQL. И используйте предложение ORDER BY:

Select * from table ORDER BY col1, col2

После этого вы должны открыть расширенный редактор OLE DB Source (щелкните правой кнопкой мыши источник OLE DB, откройте расширенный редактор) перейдите на вкладку столбцов и измените выходное свойство IsSorted на True и set change SortKeyPosition для столбцов, используемых в предложении ORDER BY.

Чтение данных кусками

У меня нет хороших знаний в синтаксисе MariaDB SQL, но я приведу несколько примеров в SQLite и Oracle:


Обновление 1 - проблемы с пакетом

В пакете есть некоторые проблемы:

  • Вы читаете и пишете из одной таблицы
  • Вы выполняете обновление и удаление таблиц для большого количества данных
  • Вы используете Merge Join

Некоторые рекомендации:

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