2016-09-29 3 views
1

Я смущен тем, что на самом деле делает MAXDOP. Я прочитал, что он ограничивает SQL-запрос для запуска на число процессоров, указанное MAXDOP; и в других статьях, они говорят, что MAXDOP ограничивает количество процессоров, с которыми ограничивается оператор в запросе.SQL Server и эффект настройки MAXDOP

Если у меня есть система с 4 процессорами, и я устанавливаю MAXDOP на 2, тогда запустите простой запрос, который будет иметь два сканирования индекса, которые будут распараллеливаться, я вижу, что я заканчиваю 5 потоками.

Выполняют ли эти 5 потоков для работы только на двух CPU из-за настройки MAXDOP?

ответ

3

Подсказка MAXDOP ограничивает как количество потоков, используемых каждым оператором параллелизма, так и общее количество логических процессоров, используемых всеми параллельными операторами в плане запроса. This post объясняет это более подробно.

С помощью двух параллельных сканирующих индексов, упомянутых в вашем вопросе, каждое параллельное сканирование ограничено двумя потоками для всего 4 параллельных потоков. Задачи для этих параллельных потоков разделяют те же процессоры, что и номер MAXDOP. Не более 1 рабочий может быть активным в одном CPU за раз, поэтому общее количество процессоров, фактически используемых в любой момент времени для параллельных операций, ограничено MAXDOP. Но у вас также будет другой поток для других операторов плана, который не считается частью MAXDOP, поэтому запрос может использовать до 3 ядер одновременно.

Выполнить этот запрос во время выполнения запроса, и вы должны видеть не более чем одна задача не работает на данном планировщиком в то время:

SELECT ost.session_id 
     , ost.scheduler_id 
     , w.worker_address 
     , ost.task_state 
     , wt.wait_type 
     , wt.wait_duration_ms 
FROM sys.dm_os_tasks ost 
     LEFT JOIN sys.dm_os_workers w ON ost.worker_address = w.worker_address 
     LEFT JOIN sys.dm_os_waiting_tasks wt ON w.task_address = wt.waiting_task_address 
WHERE ost.session_id = 54 
ORDER BY scheduler_id; 
+0

Maxdops также ограничивается изданием SQL Server (SQL Server Workgroup Edition является 2), что вы работаете. Если у вас нет веских оснований для изменения, оставьте поле «0» и пусть SQL Server решит, сколько процессоров назначить. –

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