У нас есть сервер с двумя процессорами quad xeon 5550. Единственное приложение, установленное на сервере, - это SQL-сервер. Использование ЦП редко превышает 40%, а скорость транзакций составляет 2000 транзакций в секунду.
Длина очереди процессора тоже около 2. Все вроде нормально, за исключением переключений контекста, у которых в среднем 88 000 и максимум 232 000 в рабочее время.
Я читал в документах по SQL-серверу, что число переключения контекста, превышающее 15000, указывает на проблему с процессором. Действительно ли это проблема, даже если счетчики ЦП кажутся нормальными?
Я уверен, что вы, ребята, уже поняли это, но я хотел поделиться здесь ответом, потому что это ошибка сервера.
SQL Server имеет собственную функцию таймера и использует ее по умолчанию, а не таймер OS / BIOS. Вы можете отключить это, но я не знаю, повлияет ли это на вашу способность SQL Server вводить точные данные времени (до 12 мс, iirc) в поля времени.
Отключите таймер SQL Server, войдя в диспетчер конфигурации SQL Server, войдите в службы SQL Server, щелкните правой кнопкой мыши экземпляр SQL Server и перейдите в Свойства.
В свойствах экземпляра перейдите на вкладку Параметры запуска и добавьте -t8038. Это включает флаг трассировки, который отключает таймер для этого экземпляра. Если у вас несколько экземпляров, вам придется делать это для каждого экземпляра, иначе вы все равно столкнетесь с высоким переключением контекста.
Вижу, это процессор Nehalem с гиперпоточностью.
В в прошлый раз мы спросили общий консенсус заключался в том, чтобы отключить гиперпоточность по умолчанию в конкретном поле SQL Server (и мы отключили его в нашем, с хорошими результатами). Просматривая еще несколько сайтов, я слышу этот совет, который повторяют другие уважаемые люди.
Итак, вы можете попробовать повернуть выключен сначала гиперпоточность, затем повторное измерение.