Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом разделе содержатся рекомендации по проектированию пакетов служб Integration Services, чтобы избежать распространенных проблем с производительностью. В этом разделе также содержатся сведения о функциях и средствах, которые можно использовать для устранения неполадок с производительностью пакетов.
Настройка потока данных
Чтобы настроить задачу потока данных для повышения производительности, можно настроить свойства задачи, настроить размер буфера и настроить пакет для параллельного выполнения.
Настройка свойств задачи потока данных
Замечание
Свойства, рассмотренные в этом разделе, должны быть заданы отдельно для каждой задачи потока данных в пакете.
Вы можете настроить следующие свойства задачи потока данных, все из которых влияют на производительность:
Укажите расположения для временного хранилища буферных данных (свойство BufferTempStoragePath) и столбцов, содержащих данные больших двоичных объектов (BLOB) (свойство BLOBTempStoragePath). По умолчанию эти свойства содержат значения переменных среды TEMP и TMP. Может потребоваться указать другие папки, чтобы поместить временные файлы на другой или более быстрый жесткий диск или распространить их по нескольким дискам. Можно указать несколько каталогов, разделив имена каталогов точкой с запятой.
Определите размер буфера по умолчанию, который использует задача, задав свойство DefaultBufferSize и определите максимальное количество строк в каждом буфере, задав свойство DefaultBufferMaxRows. Размер буфера по умолчанию составляет 10 мегабайт с максимальным размером буфера в 100 мегабайт. Максимальное число строк по умолчанию — 10 000.
Задайте количество потоков, которые задача может использовать во время выполнения, задав свойство EngineThreads. Это свойство предоставляет предложение обработчику потока данных о количестве используемых потоков. Значение по умолчанию — 10 с минимальным значением 3. Однако движок не будет использовать больше потоков, чем нужно, независимо от значения этого свойства. Подсистема также может использовать больше потоков, чем указано в этом свойстве, при необходимости, чтобы избежать проблем с параллелизмом.
Указывает, выполняется ли задача потока данных в оптимизированном режиме (свойство RunInOptimizedMode). Оптимизированный режим повышает производительность, удаляя неиспользуемые столбцы, выходные данные и компоненты из потока данных.
Замечание
Свойство с тем же именем RunInOptimizedMode можно задать на уровне проекта в SQL Server Data Tools (SSDT), чтобы указать, что задача потока данных выполняется в оптимизированном режиме во время отладки. Это свойство проекта переопределяет свойство RunInOptimizedMode задач потока данных на этапе проектирования.
Настройка размера буферов
Подсистема потока данных начинает задачу изменения размера буферов, вычисляя предполагаемый размер одной строки данных. Затем он умножает предполагаемый размер строки на значение DefaultBufferMaxRows, чтобы получить предварительное рабочее значение для размера буфера.
Если результат превышает значение DefaultBufferSize, подсистема уменьшает количество строк.
Если результат меньше, чем размер буфера, вычисляемый внутренним образом, подсистема увеличивает количество строк.
Если результат оказывается между минимальным размером буфера и значением DefaultBufferSize, движок устанавливает размер буфера максимально близко к предполагаемому размеру строки, умноженному на значение DefaultBufferMaxRows.
При начале тестирования производительности задач потока данных используйте значения по умолчанию для DefaultBufferSize и DefaultBufferMaxRows. Включите ведение журнала в задаче потока данных и выберите событие BufferSizeTuning, чтобы узнать, сколько строк содержится в каждом буфере.
Прежде чем приступить к настройке размера буферов, самое важное улучшение заключается в том, чтобы уменьшить размер каждой строки данных, удалив ненужные столбцы и настроив типы данных соответствующим образом.
Чтобы определить оптимальное количество буферов и их размер, поэкспериментируйте со значениями DefaultBufferSize и DefaultBufferMaxRows во время мониторинга производительности и информации, сообщаемой событием BufferSizeTuning.
Не увеличивайте размер буфера до точки, в которой начинается разбиение по страницам на диск. Выгрузка на диск ухудшает производительность системы больше, чем не оптимизированный размер буфера. Чтобы определить, происходит ли разбиение по страницам, отслеживайте счетчик производительности buffers spooled в оснастке производительности консоли управления Майкрософт (MMC).
Настройка пакета для параллельного выполнения
Параллельное выполнение повышает производительность на компьютерах с несколькими физическими или логическими процессорами. Для поддержки параллельного выполнения различных задач в пакете службы Integration Services используют два свойства: MaxConcurrentExecutables и EngineThreads.
Свойство MaxConcurrentExcecutables
Свойство MaxConcurrentExecutables является свойством самого пакета. Это свойство определяет, сколько задач может выполняться одновременно. Значение по умолчанию — -1, что означает количество физических или логических процессоров плюс 2.
Чтобы понять, как работает это свойство, рассмотрим пример пакета с тремя задачами потока данных. Если задано MaxConcurrentExecutables значение 3, все три задачи потока данных могут выполняться одновременно. "Однако предположим, что каждая задача по обработке потоков данных включает 10 деревьев выполнения в цепочке от источника к месту назначения." Установка MaxConcurrentExecutables на значение 3 не гарантирует, что деревья выполнения в каждой задаче Data Flow выполняются параллельно.
Свойство EngineThreads
Это EngineThreads свойство является свойством каждой задачи потока данных. Это свойство определяет, сколько потоков модуль потока данных может создавать и запускать параллельно. Свойство EngineThreads применяется одинаково к исходным потокам, создаваемым подсистемой потока данных для источников и рабочих потоков, создаваемых подсистемой преобразований и назначений. Поэтому значение EngineThreads 10 означает, что подсистема может создавать до десяти исходных потоков и до десяти рабочих потоков.
Чтобы понять, как работает это свойство, рассмотрим пример пакета с тремя задачами потока данных. Каждая задача потока данных содержит десять деревьев выполнения от источника до конечного пункта. Если для каждой задачи потока данных задано значение EngineThreads равным 10, все 30 деревьев выполнения могут выполняться одновременно.
Замечание
Обсуждение потоков выходит за рамки этой темы. Однако общее правило не позволяет параллельно запускать больше потоков, чем количество доступных процессоров. Выполнение большего количества потоков, чем число доступных процессоров, может препятствовать производительности из-за частого переключения контекста между потоками.
Настройка отдельных компонентов потока данных
Чтобы настроить отдельные компоненты потока данных для повышения производительности, существуют некоторые общие рекомендации, которые можно выполнить. Существуют также конкретные рекомендации для каждого типа компонента потока данных: источника, преобразования и назначения.
Общие рекомендации
Независимо от компонента потока данных, следует следовать двум общим рекомендациям, чтобы повысить производительность: оптимизировать запросы и избежать ненужных строк.
Оптимизация запросов
Ряд компонентов потока данных используют запросы либо при извлечении данных из источников, либо в операциях подстановки для создания ссылочных таблиц. Запрос по умолчанию использует синтаксис SELECT * FROM <tableName> . Этот тип запроса возвращает все столбцы в исходной таблице. Наличие всех доступных столбцов во время разработки позволяет выбрать любой столбец в качестве подстановки, сквозного или исходного столбца. Однако после выбора используемых столбцов необходимо пересмотреть запрос, чтобы включить только те выбранные столбцы. Удаление лишних столбцов делает поток данных в пакете более эффективным, так как меньше столбцов создают меньшую строку. Меньшая строка означает, что больше строк может помещаться в один буфер, а меньше работы — обработать все строки в наборе данных.
Чтобы создать запрос, можно ввести запрос или использовать построитель запросов.
Замечание
При запуске пакета в SQL Server Data Tools (SSDT) вкладка "Ход выполнения" конструктора служб SSIS выводит предупреждения. Эти предупреждения включают идентификацию любого столбца данных, который источник предоставляет потоку данных, но который впоследствии не используется компонентами потока данных, расположенными ниже по потоку. Вы можете использовать свойство RunInOptimizedMode для автоматического удаления этих столбцов.
Избегайте ненужных сортировки
Сортировка по своей природе является медленной операцией, и избегание ненужной сортировки может повысить производительность потока данных пакета.
Иногда исходные данные уже отсортированы до использования подчиненным компонентом. Такая предварительная сортировка может возникать, когда запрос SELECT использовал предложение ORDER BY или когда данные были вставлены в источник в отсортированный порядок. Для таких предварительно отсортированных исходных данных можно указать, что данные отсортированы, и таким образом избежать использования преобразования "Сортировка" для удовлетворения требований сортировки определенных подчиненных преобразований. (Например, преобразования слияния и объединения требуют отсортированных входных данных.) Чтобы указать, что данные отсортированы, необходимо выполнить следующие задачи:
Задайте свойство
IsSortedна выходные данные компонента вышестоящего потока данных наTrue.Укажите ключевые столбцы сортировки, по которым отсортированы данные.
Для получения дополнительной информации см. Сортировка данных для преобразований слияния и объединения.
Если необходимо отсортировать данные в потоке данных, можно повысить производительность, создав поток данных для использования как можно меньше операций сортировки. Например, поток данных использует Multicast-преобразование для того, чтобы скопировать набор данных. Отсортируйте набор данных один раз перед выполнением трансформации Multicast, вместо сортировки каждого из нескольких выходных данных после этой трансформации.
Дополнительные сведения см. в разделах "Преобразование сортировки", "Преобразование объединения", "Преобразование объединения слиянием" и "Преобразование мультикастовой рассылки".
Источники
Источник OLE DB
При использовании источника OLE DB для получения данных из представления выберите команду SQL в качестве режима доступа к данным и введите инструкцию SELECT. Доступ к данным с помощью инструкции SELECT лучше, чем выбор "Таблица или представление" в качестве режима доступа к данным.
Преобразования
Используйте рекомендации в этом разделе, чтобы повысить производительность преобразований: агрегирование, нечеткий поиск, нечеткая группировка, подстановка, объединение слиянием и медленно изменяющееся измерение.
Агрегированное преобразование
Преобразование "Агрегат" включает свойства Keys, KeysScale, CountDistinctKeys и CountDistinctScale. Эти свойства повышают производительность, позволяя преобразованию предварительно выделить объем памяти, необходимый для данных, кэша преобразования. Если вы знаете точное или приблизительное количество групп, которые ожидаются в результате операции Группировка по, задайте свойства Keys и KeysScale соответственно. Если вы знаете точное или приблизительное количество уникальных значений, которые, как ожидается, будут результатом операции "Отдельное число" , задайте CountDistinctKeys значения и CountDistinctScale свойства соответственно.
Если необходимо создать несколько агрегатов в потоке данных, попробуйте создать несколько агрегатов, которые используют одно преобразование Агрегата вместо создания нескольких преобразований. Такой подход повышает производительность, если один агрегат является подмножеством другого агрегата, так как преобразование может оптимизировать внутреннее хранилище и сканировать поступающие данные только один раз. Например, если агрегат использует предложение GROUP BY и агрегирование AVG, объединение их в одно преобразование может повысить производительность. Однако выполнение нескольких агрегатов в одном преобразовании агрегатов сериализует операции агрегирования и поэтому может не повысить производительность при независимом вычислении нескольких агрегатов.
Нечеткий поиск и нечеткое группирование преобразований
Сведения о оптимизации производительности преобразований нечеткого поиска и нечеткого группирования см. в техническом документе, нечетком поиске и нечеткой группировке в SQL Server Integration Services 2005.
Преобразование поиска
Свести к минимуму размер ссылочных данных в памяти, введя инструкцию SELECT, которая ищет только нужные столбцы. Этот параметр лучше, чем выбор всей таблицы или представления, которая возвращает большое количество ненужных данных.
Преобразование слиянием и объединением
Вам больше не нужно настраивать значение MaxBuffersPerInput свойства, так как корпорация Майкрософт внесла изменения, которые снижают риск, что преобразование "Объединение слиянием" будет потреблять чрезмерную память. Эта проблема иногда возникает, если несколько входов операции «Соединение слиянием» производят данные с различной скоростью.
Медленно изменяющееся преобразование измерения
Мастер "Медленно изменяющееся измерение" и преобразование "Медленно изменяющееся измерение" — это средства общего назначения, соответствующие потребностям большинства пользователей. Однако поток данных, создаваемый мастером, не оптимизирован для производительности.
Как правило, самые медленные компоненты в преобразовании «Медленно меняющееся измерение» — это преобразования команд OLE DB, которые выполняют обновления по одной строке за раз. Поэтому наиболее эффективным способом повышения производительности преобразования медленно меняющегося измерения является замена трансформаций команд OLE DB. Эти преобразования можно заменить компонентами назначения, которые сохраняют все строки, предназначенные для обновления, в промежуточной таблице. Затем можно добавить задачу Execute SQL, которая выполняет единое наборное обновление Transact-SQL UPDATE для всех строк одновременно.
Расширенные пользователи могут разработать пользовательский поток данных для медленно меняющейся обработки измерений, оптимизированной для больших измерений. Для обсуждения и примера этого подхода см. раздел "Уникальный сценарий измерения" в техническом документе Project REAL: Практики проектирования ETL в бизнес-аналитике.
Назначения
Чтобы добиться лучшей производительности в работе с пунктами назначения, рассмотрите возможность использования назначения SQL Server и протестируйте его производительность.
Целевой объект SQL Server
Когда пакет загружает данные в экземпляр SQL Server на том же компьютере, используйте назначение SQL Server. Это место загрузки оптимизировано для высокоскоростной массовой загрузки данных.
Тестирование производительности мест назначения
Вы можете обнаружить, что сохранение данных в местах назначения занимает больше времени, чем ожидалось. Чтобы определить, вызвана ли задержка тем, что место назначения неспособно обрабатывать данные достаточно быстро, можно временно заменить место назначения трансформацией "Число строк". Если пропускная способность значительно улучшается, скорее всего, узел назначения, который загружает данные, вызывает замедление.
Просмотр сведений на вкладке "Ход выполнения"
Конструктор служб SSIS предоставляет сведения о потоке управления и потоке данных при запуске пакета в SQL Server Data Tools (SSDT). Вкладка "Ход выполнения" перечисляет задачи и контейнеры в порядке выполнения и включает время начала и окончания, предупреждения и сообщения об ошибках для каждой задачи и контейнера, включая сам пакет. В нем также перечислены компоненты потока данных в порядке выполнения и содержатся сведения о ходе выполнения, отображаемые в процентах, а также количество обработанных строк.
Чтобы включить или отключить отображение сообщений на вкладке "Ход выполнения ", переключите параметр "Отчет о ходе отладки " в меню служб SSIS . Отключение отчетов о ходе выполнения может помочь повысить производительность при выполнении сложного пакета в SQL Server Data Tools.
Связанные задачи
Связанные материалы
Статьи и записи блога
Техническая статья SQL Server 2005 Integration Services: стратегия обеспечения производительности на technet.microsoft.com
Техническая статья службы Integration Services: методы настройки производительности на сайте technet.microsoft.com
Техническая статья по увеличению пропускной способности конвейеров путем разделения синхронных преобразований на несколько задач на sqlcat.com
Техническая статья Руководство по производительности загрузки данныхна сайте msdn.microsoft.com.
Техническая статья, мы загрузили 1TB за 30 минут с помощью SSIS, и вы тоже можете, на msdn.microsoft.com.
Техническая статья, 10 лучших передовых практик служб SQL Server Integration Services на sqlcat.com.
Техническая статья и пример, "Распространитель сбалансированных данных" для служб SSIS на sqlcat.com.
Запись блога, устранение неполадок с производительностью пакета SSIS на blogs.msdn.com
Видео
Видео, Настройка потока данных пакета SSIS в корпоративной среде (видеоматериал по SQL Server) на technet.microsoft.com
Видео, Понимание буферов потока данных SSIS (SQL Server видео) на technet.microsoft.com
Видео, шаблоны производительности служб Microsoft SQL Server Integration Services на channel9.msdn.com.
Презентация, как ИТ-служба Майкрософт использует усовершенствования подсистемы потоков данных SQL Server 2008 SSIS на sqlcat.com.
Видео, распространитель сбалансированных данных на technet.microsoft.com.
См. также
Инструменты для устранения неполадок при разработке пакетов
Устранение неполадок с инструментами для выполнения пакетов