Как ускорить задачу «Объекты сервера передачи служб SSIS», которая выполняется очень медленно? - PullRequest
4 голосов
/ 29 октября 2009

В SSIS 2005 я использовал мастер импорта / экспорта для создания пакета, который удаляет / воссоздает и заменяет данные в некоторых таблицах между моим рабочим сервером и машиной разработки. Поток управления, созданный мастером, был чрезвычайно сложным, поэтому я создал новый пакет и использовал «Задачу переноса объектов SQL Server», которую очень легко настроить и настроить, в отличие от сумасшедшей вещи, созданной мастером. Проблема в том, что созданный мной пакет занимает более 3 минут, а версия мастера занимает около 20 секунд. Они в основном делают одно и то же, почему такая разница во времени выполнения и есть ли параметр, который я могу изменить в пакете, использующем задачу «Передача объектов», чтобы ускорить ее выполнение?

Вот пакет, созданный мастером. Я создал похожие пакеты перед использованием мастера, который у меня не было проблем с редактированием, но я никогда не видел ничего подобного раньше. Я не могу понять, где изменить таблицы и схемы, которые я удаляю и создаю. alt text http://www.freeimagehosting.net/uploads/f7323b2ce3.png

Вот свойства задачи переноса внутри, что для контейнера цикла

альтернативный текст http://www.freeimagehosting.net/uploads/6f0dfc8269.png

Ответы [ 6 ]

1 голос
/ 06 ноября 2009

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

Иллюстрированная задача, сгенерированная мастером, выполняет «стартовую транзакцию» перед входом в цикл и фиксирует после передачи всех данных. Что лучше всего сделать, если стол не «огромный».

Вы оставили «autocommit» включенным в вашей версии с ручным кодированием?

1 голос
/ 05 ноября 2009

Я не пользуюсь мастером, но мог ли он создать хранимую процедуру, которая действительно сделает эту работу? Это объясняет, как это происходит быстрее, поскольку хранимая процедура может выполнять всю работу в базе данных.

Мне любопытно, что находится внутри TransferTask, так как, кажется, именно там все и делается.

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

Еще несколько мыслей о том, как быстро все идет, смотрите здесь, но наиболее важными являются некоторые из предоставленных комментариев, например, как он неправильно использовал Bulk Insert.

http://weblogs.sqlteam.com/mladenp/articles/10631.aspx

UPDATE: Вы можете также посмотреть на это: http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/title-12 поскольку, в конце, он показывает, сколько времени заняли его тесты, но первый комментарий может быть самой полезной частью для ускорения вашего импорта.

1 голос
/ 05 ноября 2009

Может быть довольно много вещей. Вы делаете поиск? Если это так, используйте вместо этого соединения. Вы также можете запустить профиль db, чтобы увидеть, что сумасшедший пакет делает в отличие от вашего собственного пакета.

1 голос
/ 05 ноября 2009

Почему бы не использовать сгенерированный мастером пакет и выяснить, что он делает? Очевидно, он делает вещи очень эффективно.

1 голос
/ 30 октября 2009

Какой тип подключения вы используете?

Здесь, когда я хотел передать между Oracle и SQL, поставщик ADO.NET медленнее, чем поставщик Oracle OLE DB.

0 голосов
/ 06 декабря 2013
  • Используйте параметр «Быстрый анализ» при импорте столбцов целых чисел и даты, если они не зависят от локали
  • Используйте поставщик OLE DB для собственного клиента SQL Server 10.x для высокопроизводительного подключения в оперативной памяти или рассмотрите возможность использования драйверов Attunity или SQL Server <---> Oracle
  • Установите для свойства IsSorted на выходе компонента потока данных в восходящем направлении значение True.
  • Выберите режим доступа к данным назначения OLE DB «Таблица или Просмотр - быстрая загрузка»
  • Параллельное выполнение задач не добавляет ненужных ограничений приоритета
  • Избегайте использования select * в задаче потока данных
  • ( свойство [RunInOptimizedMode] ). Оптимизированный режим повышает производительность, удаляя неиспользуемые столбцы, выходные данные и компоненты из потока данных.
  • Снять флажок Ограничения
  • Установите размер сетевого пакета 32 КБ вместо значения по умолчанию 4 К
  • Удалять индексы в усеченных / перезагружаемых таблицах и рассмотреть возможность использования усечения при использовании delete *
  • Если таблицы немного изменились, рассмотрите возможность объединения
  • Рассмотрите возможность использования SP для перестроения динамического индекса, например, известного , указанного здесь:
  • Загрузка теста с использованием UAT с SQL Server Profiler, установленной для фильтрации в приложении "ssis -%"
  • Размер буфера по умолчанию составляет 10 мегабайт, максимальный размер буфера составляет 100 мегабайт.
  • Отдельные MDF / LDF, а также диски TempDB и дефрагментация
  • Найти узкое место в вашей базе данных с помощью DMV
  • Изменить на RAID 10 или 0 с RAID 5 или другого
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...