Разработка пакетов служб SSIS для параллелизма (видеоматериал по SQL Server)

Продукт:службы Microsoft SQL Server Integration Services

Автор: Мэтт Кэррол (Matt Carroll), корпорация Майкрософт

Продолжительность: 00:12:37

Размер: 29,2 МБ

Тип: WMV-файл

Просмотреть видеоролик

См. также

Создание и изменение столбцов идентификаторов

Эффективная передача данных с использованием переключения секций

Статьи по теме и сообщения в блогах:

10 рекомендаций по службам SQL Server Integration Services

Мировой рекорд в области извлечения, преобразования и загрузки

Дополнительные видеоролики:

Измерение и анализ производительности пакетов служб SSIS в выпуске Enterprise Edition (видеоматериал по SQL Server)

Настройка потока данных в пакете служб SSIS в выпуске Enterprise Edition (видеоматериал по SQL Server)

Основные сведения о буферах потока данных служб SSIS (видеоматериал по SQL Server)

Краткое содержание видеоролика

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

Благодарности

Благодарим Томаса Кейзера (Thomas Kejser) за участие в подготовке материала для серии — Службы SSIS: проектирование и настройка для повышения производительности (серия видеороликов по SQL Server). Этот видеоролик четвертый в серии.

Благодарим Карлу Саботту (Carla Sabotta) и Дугласа Лауденшлягера (Douglas Laudenschlager) за рекомендации и ценные отзывы.

Технические примечания по видеоролику

Dd795221.note(ru-ru,SQL.100).gifПримечание.
Технические примечания — это подборка фрагментов видеоролика.

Далее изложены основы параллельной разработки: секционирование задачи, устранение конфликтов и эффективное планирование.

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

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

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

Секционирование задачи

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

Помимо секционирования исходной таблицы понадобится секционирование целевых таблиц в соответствии с секционированием исходных данных. Команда SQL SWITCH служит весьма эффективным механизмом добавления и удаления секций таблицы.

Устранение конфликтов

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

Обязательно устраняйте конфликты блокировок. Большое количество соединений, выполняющих вставку в одну таблицу, рано или поздно вызовут конфликт. Чтобы избежать конфликта, применяйте секционированные таблицы и используйте команду SQL SWITCH.

Следите за конфликтами в управляющем оборудовании. Если проблемой является дисковый ввод-вывод, перенесите данные на дополнительные или более быстрые диски. Если проблемой является сетевой ввод-вывод, добавьте или обновите сетевые контроллеры. Если проблемой является загрузка ЦП или объем памяти, выполняйте задачу на компьютере с большим числом процессоров или большим объемом памяти либо на нескольких компьютерах. Помните, что службы Integration Services работают в оперативной памяти, поэтому обеспечьте достаточный объем памяти для каждого пакета.

Эффективное планирование

После секционирования задачи на меньшие компоненты и устранения конфликтов между задачами нужно запланировать эффективное выполнение этих задач. Чтобы создать эффективное расписание, сначала определите очередь приоритетов для выполняемой работы. Для этого отлично подходит таблица SQL.

Затем запустите несколько копий пакета, построенного для выполнения работы. Простым и эффективным средством для запуска служит команда Windows START, которая вызывает программу dtexec.exe. Количество запускаемых пакетов определяет действующую степень параллелизма.

Затем каждый пакет выполняет работу из очереди задач на основе приоритетов, пока не останется невыполненной работы. Цикл внутри пакета сначала получает задачу из очереди приоритета, затем выполняет работу, определяемую этой задачей, а затем повторяет эти операции, пока очередь задач не станет пустой.

Демонстрация

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

При втором запуске демонстрации два процесса работают параллельно. Задачи выполняются пакетами попарно, и общее время выполнения демонстрации сокращается почти вдвое — с 64 до 36 секунд.

При третьем запуске демонстрации четыре процесса работают параллельно. Время для выполнения отдельных задач выросло примерно с 9 до 14 секунд, а общее время выполнения снизилось примерно с 36 до 28 секунд.

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

См. также

Другие ресурсы

Группа SQLCAT

Справка и информация

Получение помощи по SQL Server 2008