Создание нескольких задач SQL в SQL Server 2005 - PullRequest
2 голосов
/ 02 октября 2008

У меня есть несколько сохраненных процедур, которые я хотел бы запустить одновременно на сервере. В идеале, все на сервере, без подключения к внешнему клиенту.

Какие есть варианты, чтобы запустить все это и запустить их одновременно (мне даже не нужно ждать, пока все процессы завершатся для выполнения дополнительной работы)?

Я думал о:

  • Запуск нескольких соединений из клиент, каждый из которых запускает соответствующий ИП.
  • Настройка заданий для каждый SP и начиная работу с Соединение с SQL Server или SP.
  • Использование xp_cmdshell для запуска дополнительных прогонов эквивалентно osql или whetever
  • SSIS - мне нужно посмотреть, можно ли динамически записать пакет для обработки большего количества SP, потому что я не уверен, сколько доступа мои клиенты получат к производству

В случае задания и cmdshell, я, вероятно, столкнусь с проблемами уровня разрешений от администратора базы данных ...

SSIS мог бы быть хорошим вариантом - если бы я мог вести список таблиц SP.

Это ситуация с хранилищем данных, и работа в значительной степени независима, и NOLOCK универсально используется на звездах. Система представляет собой 8-гигабайтный компьютер емкостью 32 ГБ, поэтому я собираюсь загрузить его и уменьшить, если у меня возникнут проблемы.

У меня в основном три слоя, слой 1 имеет небольшое количество процессов и зависит в основном от всех фактов / измерений, которые уже загружены (эффективно, звезды - это слой 0 - и да, к сожалению, все они должны быть загружены ), Уровень 2 имеет ряд процессов, которые зависят от некоторых или всех уровней 1, а уровень 3 имеет ряд процессов, которые зависят от некоторых или всех уровней 2. У меня уже есть зависимости в таблице, и они будут только на начальном этапе. запускать все процессы в определенном слое одновременно, поскольку они являются ортогональными внутри слоя.

Ответы [ 4 ]

2 голосов
/ 02 октября 2008

Является ли SSIS опцией для вас? Вы можете создать простой пакет с параллельными задачами «Выполнение SQL» для одновременного выполнения сохраненных процедур. Однако, в зависимости от того, что делают ваши хранимые прокы, вы можете или не можете получить выгоду от запуска этого параллельно (например, если они все имеют доступ к одним и тем же записям таблицы, возможно, придется подождать снятия блокировок и т.

1 голос
/ 24 февраля 2010

В итоге я создал консольную программу C #, которая запускает процессы Async, поскольку они могут быть запущены, и отслеживает соединения.

1 голос
/ 05 октября 2008

возможно, вы захотите посмотреть на сервисного брокера и его хранимые процедуры активации ... может быть вариант ...

1 голос
/ 03 октября 2008

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

Основная стратегия для этого состоит в том, чтобы иметь управляющую БД со списком sprocs и их зависимостей. На основе зависимостей вы можете выполнить Topological Sort , чтобы дать им команду на выполнение. Если вы сделаете это, вам нужно управлять зависимостями - все предшествующие элементы хранимой процедуры должны завершиться до ее выполнения , Сам по себе запуск sprocs в нескольких потоках не приведет к этому сам по себе.

Реализация этого означала, что большая часть функциональности служб SSIS была выбита из головы и реализован другой планировщик. Это нормально для продукта, но, вероятно, излишним для системы на заказ. Таким образом, более простое решение:

Вы можете управлять зависимостями на более грубом уровне, организовав ETL по вертикали по измерению (иногда известному как Subject Oriented ETL ), где один пакет SSIS и набор sprocs извлекают данные из извлечения. вплоть до производства таблиц измерений или фактов. Обычно размеры будут в основном разрозненными, поэтому они будут иметь минимальную взаимозависимость. Там, где есть взаимозависимость, сделайте процесс загрузки одного измерения (или таблицы фактов) зависимым от того, что ему нужно в восходящем направлении.

Каждый загрузчик становится относительно модульным, и вы по-прежнему получаете полезную степень параллелизма, параллельно запуская процессы загрузки и позволяя планировщику SSIS работать с ним. Зависимости будут содержать некоторую избыточность. Например, таблица ODS может не зависеть от завершения загрузки измерения, но сам по себе вышестоящий пакет переносит компоненты прямо в размерную схему до ее завершения. Однако на практике это вряд ли является проблемой по следующим причинам:

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

Вы можете создать пакеты служб SSIS, чтобы они забрали всю свою конфигурацию из файла XML, и местоположение можно было указать в виде переменной среды. Подобные вещи могут быть довольно легко реализованы с помощью систем планирования, таких как Control-M. Это означает, что модифицированный пакет служб SSIS может быть развернут с относительно небольшим ручным вмешательством. Производственному персоналу могут быть предоставлены пакеты для развертывания вместе с хранимыми процедурами, и они могут сохранять файлы конфигурации для каждой среды без необходимости вручную настраивать конфигурацию в пакетах служб SSIS.

...