Назад | Перейти на главную страницу

Оптимизация сервера SQL 2008 внутри VMWare ESXi

Обычно я запускаю свои MSSQL-серверы на выделенных серверах, но мы взяли клиента, который запускает свой SQL-сервер на хосте VMWare ESXi 4, и, откровенно говоря, он работает как дерьмо.

Мы определили, что проблема не в самой базе данных. Мы развернули ту же базу данных на выделенном сервере с более низкими характеристиками, чем гость VMWare, и она работала как минимум в 5 раз быстрее.

Сервер:

Dual Quad Core Xeon 2Ghz (I don't know the exact model)
24Gb RAM
4x 300Gb SAS (RAID 10)
ESXi 4

Хозяин:

4x vCPUs
3Gb RAM
80Gb disk space
Server 2008 Standard
SQL Server 2008 Workgroup

У других виртуальных машин на хосте очень низкий трафик. 2-й DC (почти не используется), веб-сервер с низким трафиком и терминальный сервер с небольшим объемом (~ 5 пользователей в любой момент времени) и несколько других гостей.

Давным-давно я прочитал статью о настройке целой кучи настроек пейджинга в Windows и SQL-сервере для его оптимизации, но больше не могу найти :(

Есть ли какие-нибудь советы или уловки, которые можно предложить для повышения производительности SQL?

Иди получить vSphere удаленный интерфейс командной строки (перейдите в драйверы и инструменты -> инструменты автоматизации и SDK)

После того, как вы установили эту настройку, войдите в поле и используйте esx top, чтобы увидеть ваше узкое место (информативная ссылка)

Поскольку вы используете 4 виртуальных ЦП, обратите внимание на столбец% RDY на экране процессора в esxtop. это время, в течение которого машина ожидает доступа к 4 процессорам одновременно. В зависимости от того, с какой VMWare SE вы разговариваете, все, что выше 2-5, - ПЛОХО.

Также вы можете посмотреть графики на вкладке «производительность» VIC, чтобы увидеть, что происходит, особенно внимательно посмотрите на графики памяти, обратите внимание на всплывающее окно с высокой памятью.

Хорошо, вот несколько советов в произвольном порядке;

  • Убедитесь, что виртуальные машины работают на виртуальном оборудовании модели 7 (это указано в сводке по виртуальной машине)
  • Убедитесь, что все диски ВМ толстые, а не тонкие
  • Обновление до версии 4, обновление 1
  • Убедитесь, что на всех виртуальных машинах установлены последние версии vmtools.
  • Для виртуальных машин W2K8 используйте дисковый контроллер LSI SAS и сетевые карты vmxnet3.
  • Убедитесь, что в ОС включена своппинг
  • Отключить хранители экрана
  • Установите для буфера видеокадров значение 4 МБ или меньше.
  • Удалите со всех виртуальных машин ненужное виртуальное оборудование, такое как дискеты, последовательные, параллельные и т. Д.
  • Как говорит Зайфер, ESX не предоставит виртуальную машину любой vCPU время до все из выделенных виртуальных ЦП доступны - попробуйте уменьшить число с 4 до 3 или 2 (не бойтесь предоставить виртуальной машине 3, 5 или 7 виртуальных ЦП, это кажется странным, но работает нормально), также посмотрите на другие свои виртуальные машины, уменьшите количество виртуальных ЦП, если они им не нужны - на самом деле у этой машины не так много ядер
  • Убедитесь, что в BIOS включена виртуализация оборудования и все параметры управления питанием настроены на производительность.
  • Посмотрите на «общие ресурсы» вашей виртуальной машины, подумайте об увеличении и / или уменьшении различных значений / приоритетов ваших общих ресурсов в зависимости от их важности и текущего поведения - также серьезно подумайте о вариантах резервирования - эти параметры могут иметь огромное значение в конкурирующей коробке.
  • Затем, очевидно, посмотрите на данные производительности виртуальной машины SQL, особенно на доступную память,% RDY и длину / ожидание дисковой очереди.
  • Рассмотрите возможность добавления дисков в массив и / или предоставления выделенных виртуальных машин / хранилищ данных / дисков для этой виртуальной машины.

Я добавлю еще, если что-нибудь подумаю, удачи.

Возможно, виртуализация - это просто признак и без того неэффективной базы данных. Хотя производительность базы данных всегда была особенно проблемной при виртуализации, если это не очень высокий трафик, нет причин, по которым БД не может работать разумно, сохраняя горячие данные в ОЗУ. Я бы проверил производительность SQL в целом и посмотрел, использует ли он выделенные 3 ГБ ОЗУ (можете ли вы дать больше?), А также проверял бы такие вещи, как индексы, фрагментированные файлы базы данных, особенно плохие запросы, которые могут выиграть от перезаписи или использовать дополнительные индексы и т. д.

Как уже говорили другие, 4vCPU на коробке всего с 8 ядрами - это много. Вы, вероятно, столкнетесь с большим количеством конфликтов планирования процессора. Я бы снизил его до одного или двух и посмотрел, улучшится ли производительность, и пошел бы оттуда.