Одноядерный SQL Server на виртуальной машине

7

Недавно наш школьный округ обновил несколько серверов с версии 2005 до 2016 года и с физических серверов на серверы виртуальных машин.

Наша команда по инфраструктуре представила виртуальные серверы для установки SQL Server с одним ядром.

Я пытаюсь объяснить руководителю этого отдела, что SQL Server «ненавидит» то, что находится на одном ядре, и он хочет видеть «доказательства». Ни одна из представленных мной данных не удовлетворила его потребность в доказательствах, и поэтому он попросил несколько статей о том, почему VM SQL Server не будет эффективно работать на одном ядре.

Какие статьи вы используете для этого?

Любая помощь для меня в моем случае будет принята с благодарностью!

дебютантка
источник
7
Когда вы лицензируете SQL на ВМ, вы все равно платите за два пакета лицензий. Вы выбрасываете деньги, не отдавая им по крайней мере два ядра, даже если вы получаете образовательную скидку.
Эрик Дарлинг
4
Вы можете сослаться на статью Гленна Барри (Microsoft MVP 10+ лет) от 2015 года, в которой перечислены рекомендуемые процессоры для SQL 2014, из которых наименьшее имеет шесть ядер.
LowlyDBA
2
Кроме того, некоторое время назад я написал технический документ для Google о настройке виртуальных машин в облаке. Вы можете применить это и к предварительной установке.
Эрик Дарлинг
Расширяя комментарий @sp_BlitzErik, минимальные базовые лицензии, которые можно применить к одному SQL Server, будь то виртуальная или физическая, составляют 4 лицензии (см. Руководство по лицензированию ). Альтернативой является лицензирование физических ядер хоста. В соответствии с этой моделью вы можете запускать столько виртуальных машин с таким количеством vCores, сколько захотите.
Марк Стори-Смит

Ответы:

11

Любой не-SQL Server-процесс, который потребляет процессор, может привести к тому, что весь SQL-сервер будет полностью непригодным для использования.

Например, Центр обновления Windows остановит SQL Server во время распаковки сборок .Net.

Любой процесс Антивируса, даже если он настроен на исключение файлов данных и папок SQL Server, может привести к тому, что SQL Server перестает отвечать на запросы при сканировании файлов и распаковке обновленных файлов определений вирусов.

Если у вас установлено какое-либо программное обеспечение для управления, такое как IBM Tivoli Server Monitor, и оно решит использовать 100% одного ядра, вы, вероятно, не сможете ничего сделать, кроме холодного выключения компьютера. Не спрашивайте меня, почему я это поднимаю.

Я мог бы продолжить, но достаточно сказать, что любой сервер с одним ядром просто требует проблем с производительностью и управляемостью. Убедитесь, что любой компьютер с одним ядром сегодня считается непригодным для использования. Черт, мой телефон имеет 8 ядер.

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

Для серьезных SQL-серверов, размещенных на VMware, вы должны настроить VMware в соответствии с Руководством по архитектуре SQL Server на основе VMware .

Это действительно сводится к тому, что одноядерная виртуальная машина может когда-либо запускать только один поток в любой момент времени. Виртуализация не является «серебряной пулей» для такой ситуации «одно ядро ​​на поток».

Приведенные выше пункты учитывают, что Windows NT (кодовая база 1993 года, на которой построены все современные версии Windows) использует упреждающую многозадачность. Упреждающая многозадачность позволяет операционным системам выполнять многозадачность путем принудительного переключения контекста по регулярному расписанию. Даже с вытесняющей многозадачностью сервер с одним ядром будет по-прежнему страдать от очень низкой производительности, если одна задача решит использовать как можно больше ЦП, так как O / S даст этой задаче столько процессорного времени, сколько можно сэкономить все еще позволяя запускать задачи с более высоким приоритетом, заставляя процессор работать до 100% Если SQL Server работает во время загрузки ЦП на 100%, объем ЦП SQL Server будет настолько уменьшен, что станет очень заметным. В приведенных выше сценариях я изложил, я нескажем, машина (или даже SQL Server) полностью «остановится» или «умрет»; это было бы просто неверно. Тем не менее, машина может стать настолько занятой, что для всех целей машина станет непригодной для использования. Добавление второго ядра, хотя и не является панацеей, снижает вероятность того, что машина станет полностью безразличной. Каждое дополнительное ядро ​​означает, что другой поток может работать на 100% ЦП, не приводя к невозможности использования компьютера.

Макс Вернон
источник
Разве Windows Server не имеет (и всегда имел) преимущественную многозадачность? Если я не ошибаюсь, то, что вы описываете, представляет собой совместную многозадачность, процессы, уступающие друг другу, когда они выполнили свою задачу высокого уровня. Конечно, спор может задержать ответ, но это не должно привести к полной остановке. Я согласен, что многоядерность - хорошая идея, если не лучшая практика, но сценарий дня гибели, который вы изложите, кажется неправильным.
Мэтт Фрэман
Иногда также есть веская причина оставаться одноядерным, если вы ранее были физическим одноядерным, и приложения, которые взаимодействуют с вашим одноядерным экземпляром, нарушили лучшие практики, такие как не указание порядка сортировки, и считали, что порядок неявно стабилен в отсутствие такого затем переключение на многоядерный может показать ошибки, которые ранее были подавлены природой одноядерности. Если у вас нет бюджета для повторного тестирования этих приложений или из-за небольшого доверия к разработчикам или, может быть, они уже ушли, то сопоставить существующие физические серверы с точки зрения выставленных ядер иногда можно с уверенностью
Mâtt Frëëman
Привет @ MâttFrëëman - я добавил в свой ответ раздел, посвященный упреждающей многозадачности. Вы напомнили мне о том, насколько лучше кодовая база NT по сравнению с кооперативной многозадачностью на основе DOS, используемой исходной кодовой базой Windows, вплоть до Windows ME.
Макс Вернон,
Я согласен с вашей большой частью вашего комментария о том, что оставаться на одноядерном компьютере иногда является необходимым злом. Мой ответ предполагает, что физические машины, которые были виртуализированы, вероятно, были многоядерными серверами, основываясь на желании OP иметь многоядерные виртуальные машины.
Макс Вернон,
@MaxVernon Спасибо, это именно то, что нам нужно!
Деб
6

Я должен был доказать то же самое раньше. Наконец, наша команда по планированию мощностей дала понять, что наши базы данных были практически непригодны для резервного копирования.

Как администратор базы данных, ваш самый большой страх должен быть потеря данных. Если вы не можете с уверенностью запускать резервные копии без сбоя или сбоя, это большая проблема. Запустите несколько тестов, чтобы убедиться, что на производительность влияет резервное копирование, а затем объясните, что с более чем одним ядром проблема должна исчезнуть.

Neghtasro
источник
3
Фактически любой серьезный объем операций ввода-вывода, будь то SQL Server или не связанный с SQL Server, может вызвать проблему.
Макс Вернон
3
@MaxVernon Абсолютно - я просто специально создал резервные копии, потому что это проблема, с которой я сталкивался раньше (в 3 часа ночи, естественно), это легко доказать, и «мы не можем делать резервные копии без сбоя!» должно быть достаточно, чтобы заставить любого разумного менеджера по инфраструктуре сэкономить одно жалкое ядро.
Нетхасро
2

Чтобы убедительно доказать, что вашему серверу требуется более одного процессора, вам необходимо предоставить информацию о рабочей нагрузке и запросах, выполняемых на сервере. Например, если он имеет только одну базу данных размером менее 100 МБ и все запросы очень просты и эффективны, иметь больше ядер может быть практически бесполезно.

Я бы порекомендовал вам начать собирать планы запросов, которые идут параллельно, и время, необходимое для их выполнения. Это продемонстрирует, что рабочая нагрузка, выполняемая в системе, выиграет от наличия нескольких процессоров.

Если он уже работает в среде виртуальных машин, вам также необходимо получить данные о производительности использования ЦП. Если вы покажете, что максимальная загрузка ЦП составляет 100% в течение длительных периодов времени, это также послужит хорошим доказательством того, что системе требуется больше ЦП.

Тони Хинкль
источник
5
Конечно, не будет никаких параллельных планов на одноядерную виртуальную машину. Вам нужно записать эти планы на коробке, которая имеет более одного ядра.
Макс Вернон
3
Чтобы добавить к комментарию Макса, если вы посмотрите в плане XML на сервере с одним ядром, вы увидите NonParallelPlanReason="EstimatedDOPIsOne".
Эрик Дарлинг
@Tony я уже уже предоставил им некоторые данные , но сказали , что одноядерный была лучшая практика с машиной VM. отсюда моя потребность в помощи!
Деб
1
@Deb О боже - никогда не слышал об этой лучшей практике! Я слышу грустный тромбон Брента Озара отсюда. Я был бы обеспокоен тем, кто делает подобные заявления, отвечая за инфраструктуру виртуальных машин.
Тони Хинкль
@ TonyHinkle - я согласен. Одноядерная виртуальная машина никогда не бывает хорошей идеей, а одинокая «лучшая практика». Хорошо, может быть, 99,999% времени вместо «никогда»: - /
Макс Вернон
2

Возможно, вам следует спросить их, почему они настаивают на том, что было бы неплохо назначить только одно ядро ​​для каждой виртуальной машины SQL Server.

Затем, в зависимости от их ответа, вы можете попытаться убедить их на основе пункта 3.3.2 по этой ссылке:

SQLServer-на-VMware, передовой обычаях

VMware рекомендует, чтобы для начального определения размера общее количество виртуальных ЦП, назначенных всем виртуальным машинам, не превышало общего количества физических ядер.

Если этот элемент не является причиной для команды по инфраструктуре выделять только 1 ядро ​​на ВМ, то, возможно, оборудование тратится впустую.

Rogerlr
источник
Не уверен, как цитата помогает делу для большего количества процессоров?
LowlyDBA
Да, но не очень понятно, почему команда Infrastruture не ставит больше процессоров на ВМ.
Rogerlr