Важным фактором здесь является то, как данные распределяются по разделам. Запрос, который охватывает границы раздела, будет возвращаться на каждой границе, требующей повторной отправки, даже если рассматриваемый раздел имеет 0 строк. Если данные равны 1 Partition = 1 Row, то это будет медленно, но вы можете увеличить количество потоков намного выше 8. Если данные в n разделах = m строках, то приведенные ниже идеи должны ускорить вас.
Предполагая, что у вас есть несколько разделов и каждый с некоторым количеством строк, самый быстрый способ - это увеличить количество потоков (если вы используете .Net, PLINQ или Parallel.ForEach (раздел) или QueueWorkItem. ()) и попросить поток просканировать свой раздел на наличие всех строк, обработать, опубликовать в SQL и удалить перед возвратом.
Учитывая задержки (10 с мс) и множественные циклы, даже с 8 потоками вы, вероятно, не так заняты, как вы думаете. Кроме того, вы не упоминаете, какую виртуальную машину вы используете, но вы можете профилировать различные размеры.
В качестве альтернативы, другой способ сделать это - использовать очередь и некоторых «n» работников. Для каждого раздела (или набора разделов) поместите сообщение в очередь. Пусть рабочие вытянут из очереди (многопоточные) и запросят / обрабатывают / публикуют / повторяют. Вы можете набрать столько рабочих, сколько вам нужно, и распределить их по большому количеству центра обработки данных (т. Е. Увеличить пропускную способность и т. Д.).