Во-первых, когда дела идут медленно, вероятно, проблема в том, что вы написали. Первое, что нужно посмотреть - это план выполнения каждого сохраненного процесса. У вас есть сканы таблицы?
Вы бегали каждый по отдельности и видели, как быстро каждый? Это поможет вам определить, является ли проблема 8 процессорами или чем-то еще. Похоже, у вас есть много шагов, связанных с этим, процесс может быть, а может и не быть проблемой.
Обрабатываете ли вы данные построчно с помощью курсора или цикла, или скалярной пользовательской функции или коррелированного подзапроса? Это может сильно повлиять на скорость. У вас есть правильная индексация? Ваши операторы запросов саркастичны? Я вижу, у вас есть распределенная транзакция, вы уверены, что пользователь, запускающий процесс, имеет правильные права на других серверах? А что за серверы существуют и работают? Вам не хватает места в temp db? Вам нужно запускать это в пакетном режиме, а не пытаться обновить миллионы записей на нескольких серверах?
Не видя этого беспорядка, трудно определить, что может вызвать его замедление.
Но я поделюсь, как я работаю с длинными сложными процессами. Сначала у них у всех есть тестовая переменная, которую я использую для отката транзакций в конце, пока я не буду уверен, что получаются правильные действия. Я также возвращаю результаты того, что я вставил перед выполнением отката. Теперь это изначально не поможет решить проблему со скоростью. Но настройте его в любом случае, потому что, если вы не можете понять, в чем заключается проблема, из плана выполнения, то, вероятно, вам нужно закомментировать все, кроме первого шага, и запустить процесс в тестовом режиме (и откат), затем продолжайте добавлять шаги, пока не увидите тот, на котором он застревает. Конечно, это может быть больше, чем один.