Держись держись держись
Хотя аспекты производительности и лицензирования интересны, они не являются единственным аспектом рабочей нагрузки, который следует учитывать.
Одна вещь, которая может повлиять на выбор процессора, это рабочие потоки.
Рабочие темы?
Да приятель! Это те вещи, которые ваш SQL Server будет использовать для выполнения ваших запросов и выполнения всех фоновых операций, необходимых для поддержания формы.
Когда у вас заканчиваются рабочие потоки, вы нажимаете THREADPOOL ждет
Threadpool?
Threadpool. Это одно из самых неприятных ожиданий на вашем сервере, а также RESOURCE_SEMAPHORE и RESOURCE_SEMAPHORE_QUERY_COMPILE . Но это ожидание памяти, и это вопрос процессора.
Итак, вернемся к тому, почему это вихрь.
Вот как SQL Server вычисляет рабочие потоки :
Обратите внимание, что удвоение числа ядер не удваивает максимальное количество рабочих потоков, и вы получаете то же число с 1 ядром, что и с 4 ядрами? Уравнение:512 + ((logical CPUs - 4) * 16)
Это позор, потому что когда число ядер увеличивается, тактовая частота обычно падает на одно или два поколения назад.
Взглянув на любую недавнюю линейку чипов Intel, вы увидите аналогичную тенденцию.
Как мне узнать, сколько потоков мне нужно?
Это будет во многом зависеть от:
- Количество пользователей
- Количество параллельных запросов
- Количество последовательных запросов
- Количество баз данных и синхронизация данных (зеркалирование, AG, резервные копии для доставки журналов)
- Если вы оставите MAXDOP и CTFP по умолчанию
Если вы не исчерпали их сегодня, вы, вероятно, в порядке.
Но откуда ты знаешь, что ты есть?
Есть хорошие вопросы, и есть отличные вопросы, и позвольте мне сказать вам кое-что, это БОЛЬШОЙ ВОПРОС .
THREADPOOL может проявляться как проблемы с соединением , и вы можете увидеть сообщения в журнале ошибок о невозможности порождения потока .
Вы также можете посмотреть статистику ожидания вашего сервера с помощью бесплатного инструмента, такого как sp_Blitz или sp_BlitzFirst (полное раскрытие, я участвую в этом проекте).
EXEC sp_Blitz
EXEC sp_BlitzFirst @SinceStartup = 1
Разве я не могу просто увеличить максимальное количество рабочих потоков?
Увеличение MWT может привести к увеличению SOS_SCHEDULER_YIELD
ожидания.
Это не конец света, но подумайте об этом, как о добавлении кричащих детей в класс учителя.
Внезапно каждому ребенку будет сложнее привлечь внимание.
Когда процесс исчерпает свою квоту в 4 мсек , потенциально может быть больше потоков, ожидающих загрузки процессора.
Производительность может показаться примерно такой же.
Как я могу использовать меньше рабочих потоков?
Вы жестокие [существительное] [существительное], это работники с семьями, чтобы поддержать! Ипотеки! Мечты!
Но хорошо, должен уважать практический результат. Ты босс.
Начать проще всего с изменения настроек по умолчанию, таких как MAXDOP и Порог стоимости для параллелизма.
Если у вас есть вопросы о том, как их установить, зайдите сюда:
После этого ваша работа становится намного сложнее. Вы должны выяснить, что использует все эти темы. Иногда вы можете сделать это, посмотрев статистику ожидания.
Более конкретно, если у вас высокие ожидания при параллелизме ( CXPACKET
) И высокие ожидания при блокировках ( LCK_
), то вы можете столкнуться с длинными цепочками блокировки, включающими параллельные запросы.
Вы знаете, что воняет? Хотя все эти параллельные запросы ожидают получения своих блокировок, они не возвращают свои выделенные потоки.
Вы можете почти услышать, что четыре ядра виртуальной машины, которые, как заверил ваш администратор, вам более чем достаточно для любой работы, задыхающейся в воздухе, а?
К сожалению, тип запроса и настройка индекса, которые вы должны выполнить, чтобы решить эту проблему, выходит за рамки вопроса.
Надеюсь это поможет!