Обычно я запускаю свои 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, чтобы увидеть, что происходит, особенно внимательно посмотрите на графики памяти, обратите внимание на всплывающее окно с высокой памятью.
Хорошо, вот несколько советов в произвольном порядке;
Я добавлю еще, если что-нибудь подумаю, удачи.
Возможно, виртуализация - это просто признак и без того неэффективной базы данных. Хотя производительность базы данных всегда была особенно проблемной при виртуализации, если это не очень высокий трафик, нет причин, по которым БД не может работать разумно, сохраняя горячие данные в ОЗУ. Я бы проверил производительность SQL в целом и посмотрел, использует ли он выделенные 3 ГБ ОЗУ (можете ли вы дать больше?), А также проверял бы такие вещи, как индексы, фрагментированные файлы базы данных, особенно плохие запросы, которые могут выиграть от перезаписи или использовать дополнительные индексы и т. д.
Как уже говорили другие, 4vCPU на коробке всего с 8 ядрами - это много. Вы, вероятно, столкнетесь с большим количеством конфликтов планирования процессора. Я бы снизил его до одного или двух и посмотрел, улучшится ли производительность, и пошел бы оттуда.