Выделенные ресурсы на виртуальных машинах с SQL Server

8

Насколько я понимаю, одним из больших преимуществ использования виртуальной машины является то, что вы можете распределять ресурсы между виртуальными машинами на хосте. Таким образом, вы можете иметь хост с 120 процессорами и разместить на нем 5 виртуальных машин с 32 процессорами каждый. Дополнительные процессоры «разделяются» между виртуальными машинами, при этом хост назначает процессоры динамически в зависимости от необходимости. То же самое для памяти.

Я также понял, что для виртуальных машин, на которых размещены SQL-серверы, это не так, но мои администраторы не согласны. У кого-нибудь есть доказательства или документация, так или иначе?

Я не знаю, имеет ли это значение, но мы используем VMWare.

Кеннет Фишер
источник
2
как ни странно, у нас просто была проблема со случайными отказами в виртуализированной группе доступности. мы были переподписаны на CPU с временем готовности ~ 8 секунд. прослушиватель ag потерял аренду кластера и переключился на другой узел высокой доступности. Трудность здесь заключается в том, что он не представляет собой нагрузку на процессор гостя, хотя ошибка обычно связана с устойчивой нагрузкой на процессор. это приводит к самой большой проблеме с виртуализацией - зная, что происходит, и доверяя другим делать то же самое.
swasheck
Очень хороший пост в блоге о « горячей замене» VMware CPU vNUMA. Эффекты на SQL Server. Автор Джонатан Кехайяс
Кин Шах
Кстати: это обычно не "То же самое для памяти". В большинстве случаев вы используете общий процессор, но для каждой виртуальной машины выделяется определенный объем памяти, и эта память не разделяется. Совместное использование процессора с SQL Server может быть нормальным, в зависимости от общей загрузки процессора для всех ваших виртуальных
машин
@MTilsted Извините за путаницу. Когда я сказал «То же самое для памяти», я имел в виду именно то, что им couldнужно поделиться. Когда я задавал вопрос, я понял, что он вполне может отличаться для процессоров и памяти, но оба варианта были возможны.
Кеннет Фишер

Ответы:

15

То, что вы спрашиваете: «Хорошо, если мы перегружаем процессоры?»

Это нормально, пока вы не начнете испытывать узкие места в производительности, связанные с загрузкой процессора. Тот же ответ относится и к перегрузке сети - вы не помещаете в хост 5 отдельных карт Ethernet 10 Гбит и выделяете одну карту для каждой виртуальной машины. Виртуализация - это сверхзадача и переход от грани доступности ресурсов к их потребностям.

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

Брент Озар
источник
Давайте не будем забывать о важности выделенных и независимых физических дисков; по одному для данных, журналов и Tempdb . :)
Chiramisu
13

Проблема с динамическим распределением некоторых ресурсов заключается в том, что это приводит к непредсказуемой производительности. В отчете по запросу x вчера было доступно 32 ЦП, и он выполнялся за 4 минуты, сегодня - только 24, и это заняло значительно больше времени. Вы также можете увидеть задержку, когда гость ожидает появления других ядер.

Джонатан Кеяйас (Jonathan Kehayias) дает некоторые практические предупреждения о чрезмерной подписке процессора и памяти здесь (и, честно говоря, я доверяю его опыту и советам больше, чем обычному администратору виртуальной машины, не обижайтесь на них, но я подозреваю, что у него гораздо более прямой опыт с комбинацией):

Аарон Бертран
источник
11

Насколько я понимаю, некоторый уровень чрезмерной загрузки процессора может быть вполне нормальным, но это полностью зависит от требований рабочей нагрузки всех гостей. Посетите блог Дэвида Клее, чтобы узнать много полезной информации о ВМ. В частности, http://www.davidklee.net/articles/sql-server-articles/cpu-overcommitment-and-its-impact-on-sql-server-performance-on-vmware/ для объяснения чрезмерной приверженности ЦП и его влияния на SQL Server.

Чрезмерное выделение памяти - это еще одно животное, и, как правило, хост виртуальной машины не должен чрезмерно выделять память, если он работает на SQL Server. Еще раз я буду использовать Дэвида Клее в качестве ссылки. http://www.davidklee.net/2013/11/04/lock-pages-in-memory-in-sql-server-on-vmware-why-or-why-not/ где он объясняет влияние памяти на -commitment.

Надеюсь это поможет.

cjsommer
источник