SQL Server 2005 - многопроцессорное использование - PullRequest
3 голосов
/ 02 октября 2009

У нас есть 16-процессорный кластер SQL Server 2005. Рассматривая данные об использовании процессора, мы видим, что большую часть времени когда-либо используются только 4 из 16 процессоров. Тем не менее, в периоды высокой нагрузки иногда используются 5-й и 6-й процессоры, хотя они никогда не приближаются к использованию других 4. Я обеспокоен тем, что в периоды чрезвычайно высокой нагрузки не все другие процессоры будут использоваться и у нас будет снижение производительности.

Что мы видим в стандартном поведении кластера SQL Server 2005? Я предполагал, что все 16 процессоров будут использоваться постоянно, хотя, похоже, это не так. Это то, что мы можем настроить? Или это ожидаемое поведение? Сможет ли SQL-сервер использовать все 16 процессоров, если дело доходит до этого?

Ответы [ 4 ]

3 голосов
/ 02 октября 2009

Я буду считать, что вы проявили должную осмотрительность и подтвердили, что использование ЦП относится к процессу sqlservr.exe, поэтому здесь мы не будем гоняться за красной сельдью. Если нет, убедитесь, что ЦП использует sqlservr.exe, проверив счетчики производительности Process \% Processor.

Необходимо понимать модель планирования ЦП SQL Server, как описано в Архитектура потоков и задач . SQL Server распределяет запросы ( sys.dm_exec_requests ) по планировщикам ( sys.dm_os_schedulers ), назначая каждый запрос задаче ( sys.dm_os_tasks ), выполняемой работник ( sys.dm_os_workers ). Работник поддерживается потоком ОС или оптоволокном ( sys.dm_os_threads ). Большинство запросов (пакет, отправленный на SQL Server) порождает только одну задачу, хотя некоторые запросы могут порождать несколько задач (параллельные запросы являются наиболее печально известными).

Обычным поведением планирования SQL Server 2005 должно быть равномерное распределение задач по всем планировщикам. Каждый планировщик соответствует одному ядру процессора. Результатом должна быть равномерная нагрузка на все ядра процессора. Но я видел проблему, которую вы описали несколько раз в лабораторных условиях, когда физическая нагрузка распределялась неравномерно по нескольким процессорам. Вы должны понимать, что SQL Server не контролирует соответствие потоков своих рабочих, а вместо этого полагается на алгоритм соответствия ОС для определения локальности потоков. Это означает, что даже если SQL Server распределяет запросы по 16 планировщикам, ОС может решить запустить потоки только на 4 ядрах. В корреляции с этой проблемой есть две проблемы, которые могут вызвать или усугубить это поведение:

  • Hyperthreading. Если вы включили гиперпоточность, отключите ее. SQL Server и гиперпоточность никогда не должны смешиваться .
  • Плохие драйверы. Убедитесь, что у вас установлены правильные драйверы системного устройства (для таких вещей, как материнская плата и тому подобное).

Также убедитесь, что ваш SQL 2005 по крайней мере на уровне SP2, желательно не позднее SP и всех примененных CU. То же самое касается Windows (вы используете Windows 2003 или Windows 2008?).

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

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

Даже учитывая узкое место ввода-вывода, я бы проверил, настроены ли у вас привязки к процессору, каковы ваши настройки maxdop, будь то SMP или NUMA, которые также должны влиять на то, какой maxdop вы можете установить.

когда вы говорите, что у вас 16-процессорный кластер, вы имеете в виду 2 SQL-сервера в кластере с 16 процессорами каждый или 2 x 8-сторонних SQL-серверов?

1 голос
/ 02 октября 2009

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

Я рассуждаю так: если бы была какая-то проблема с конфигурацией, которая ограничивала вас 4 процессорами, вы бы не увидели, как она переходит на 5-й и 6-й процессоры.

1 голос
/ 02 октября 2009

Вы уверены, что нигде не ограничены? На IO что ли?

...