Выполнение инструкции обновления внутри пакета DTS - PullRequest
1 голос
/ 09 сентября 2010

У меня есть пакет DTS, который после ежедневного запуска без проблем начал играть. Первоначально он вставлял данные в таблицу, которая затем запускала триггер вставки. Триггер использовал [вставлен] для обновления трех столбцов в таблице. Обычно обновлялось около 500 000 строк вставленных данных.

Когда проблема началась, оператору обновления внутри триггера потребовалось несколько часов, и его обычно приходилось отменять. Отключение триггера позволило DTS работать как обычно. Выполнение оператора UPDATE в обычном окне запроса не вызвало никаких проблем - оно выполнялось менее чем за 10 секунд.

Чтобы обойти проблему, в DTS была добавлена ​​другая задача для запуска ОБНОВЛЕНИЯ после ВСТАВКИ вместо триггера. Некоторое время это работало нормально, но теперь отдельная задача UPDATE начала демонстрировать ту же проблему, что и триггер. ОБНОВЛЕНИЕ все еще работает как ожидалось, если сделано в обычном окне запроса.

Пакет DTS был создан в SQL 2000 и работает на SQL 2005 Enterprise x64.

Я немного растерялся, чтобы попытаться понять это. Есть идеи?

Ответы [ 2 ]

1 голос
/ 07 мая 2011

Распараллеливание запросов (SELECT) довольно хорошо обеспечивается самим механизмом SQL, но когда дело доходит до модификаций данных большого объема (UPDATE, INSERT, DELETE), стандартный механизм распараллеливается для наилучшего использования всех доступных ресурсов (диск). , несколько процессорных ядер и т. д.).

Поэтому вы можете взглянуть на подход SQL Parallel Boost на http://www.ibax.ch/-IBX-/plain.simpleimagetitletextlinklist.en.solutions.products.parallelboost/default.aspx

Этот подход также можно использовать для параллельного выполнения нескольких операторов SQL.

Решение для распараллеливания, основанное исключительно на механизме SQL, использует преимущества минимизированной сложности и не имеет никаких «внешних» компонентов, таких как SSIS. Кроме того, это самое эффективное решение для разделения задач и синхронизации, поскольку оно не имеет потенциальных затрат на соединение и связь. Общий прирост производительности благодаря распараллеливанию с SQL Parallel Boost составляет до 10!

Если вы не хотите перестраивать собственное решение, SQL Parallel Boost предоставляет автономное решение на основе чистого T-SQL, которое может быть легко встроено в существующие приложения и задачи процесса ETL.

0 голосов
/ 09 сентября 2010

Вы пытались просмотреть план запроса для оператора UPDATE?Вы можете сделать это в анализаторе запросов / ssms.

Какие индексы есть у таблицы?Может быть, их нужно поддерживать и они замедляют обновление.

Не могли бы вы подробнее рассказать об ОБНОВЛЕНИИ?Это один оператор SQL или вы используете CURSOR?

Преобразование всего этого в SSIS, скорее всего, повысит производительность, но это зависит от того, что вы на самом деле делаете в DTS.

...