2011-06-28 4 views
0

Я готовлю процедуру экспорта из SQL Server в стороннюю систему ERP. Он сканирует почти все таблицы из схемы базы данных и создает XML для каждого продукта. Экспорт достаточно длинный, клиентское желание делает его быстрее. Я понял, что в процедуре экспорта используется только 1 процессор.Многопроцессорное использование в SQL Server

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

Вопросы

  1. Как я могу сделать это, используя только средства SQL Server. Одним из возможных решений является использование SSIS. Любой другой?

  2. Количество процессоров может варьироваться. Я могу получить количество процессоров, используя sys.dm_os_sys_info. Как процесс динамического запуска несколько раз зависит от количества процессоров?

+0

Есть ли что-нибудь еще, используя этот сервер в одно и то же время? Если это так, вы можете не захотеть связать другие процессоры. –

+0

Этот экспорт будет производиться не на производственном сервере, а на локальном и только один раз для каждой клиентской базы данных. Но есть много баз данных. – Dalex

ответ

0

Несколько вещей, чтобы иметь в виду:

- Вы уверены, что вы ЦП и не IO связаны? По моему опыту, очень редко бывает, чтобы процессор был узким местом в процессе и гораздо более вероятно имел ограничения скорости доступа к диску. Вы должны выполнить дополнительное тестирование, чтобы избежать реструктуризации всего процесса, только чтобы получить увеличение на 2%, потому что ваши жесткие диски не могут идти в ногу со временем.

- Это может быть так же просто, как проверить настройку параллелизма на стороне сервера. Иногда администраторы баз данных устанавливают это значение 1, потому что оно может смягчать проблемы с плохими планами запросов, но обычно существует ограниченная выгода.

- Вы можете установить максимальную степень параллелизма в запросе, используя OPTION (MAXDOP #) где # - количество параллельных процессов, которые вы хотите разрешить.

+0

1. Я проверяю счетчики производительности - процессор всегда 100%, но HD записывает только около 30K в секунду - это потому, что вся база в кэше в памяти 2. Да, она имеет параллелизм = 1 3. - MAXDOP ограничивает количество ядер, не расширять его, разве нет? – Dalex

+0

@Dalex - если perf-счетчик указывает, что процессор равен 100%, то чем вы надеетесь получить мое разбиение на несколько партий? Если вы уже привязаны к процессору, у вас будет только 4 задания, работающие со скоростью 25% ... – JNK

+0

1 ядро ​​- это, конечно, 100%, а не CPU – Dalex

Смежные вопросы