SQL 2012 в Hyper-V. Почему мои запросы работают медленно, пока я не отбрасываю и не создаю пространственный индекс?

2428
Damien

У меня есть пространственное приложение, которое запрашивает несколько таблиц (слоев) каждый раз, когда пользователь панорамирует / масштабирует карту. Когда я переместил сервер SQL в Hyper-V, я заметил, что при запросе одной из таблиц была задержка в несколько секунд. Я отключил эту таблицу из запросов, а затем другая таблица стала медленной и т. Д.

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

Я попытался использовать диск сквозного доступа, но это не имело никакого значения. Эта «ошибка» не возникает на одном и том же оборудовании при работе с собственным сервером SQL (не виртуальным). Я также пробовал Hyper-V на другом настольном ПК и также пробовал SQL 2014 Express, но у меня возникла та же проблема.

Могу ли я попробовать другие настройки Hyper-V / SQL? Есть ли объяснение, почему удаление и создание индекса временно решает проблему?

0

1 ответ на вопрос

1
Brad

К сожалению, в некоторых сценариях затраты на виртуализацию кажутся такими же. Если вы работаете с динамической памятью, в которой используется драйвер всплывающей памяти, попробуйте настроить ВМ на заданный объем ОЗУ. Следите за использованием памяти как хоста, так и гостя. Если вы видите, что память все больше расходуется, попробуйте отключить блокировку страниц в памяти. Одна вещь, которую вы можете попробовать, - это когда все гости отключены и хост загружен заново, просто загрузите единственный гость, работающий на SQL. Если запросы выполняются так, как должны, другие гостевые машины отнимают у этой виртуальной машины необходимые ресурсы. Это может произойти, когда сервер имеет неправильный размер и довольно распространен. Обойти это можно, добавив дополнительный массив дисков и выделив его именно этой виртуальной машине. Другой способ обмануть систему - использовать SSD-кеширование для базы данных. Несколько других моментов, которые следует учитывать, - это если вы выключаете службу SQL и используете такой инструмент, как UltraDefrag, и выполняете полную оптимизацию и дефрагментацию, а затем восстанавливаете сервис, если запрос выполняется быстрее. Вы можете получить UltraDefrag с открытым исходным кодом и бесплатно наhttp://ultradefrag.sf.net Наконец, у Microsoft есть документ, с которым вы, возможно, захотите проверить свои конфигурации. Проверьте: http://www.slideshare.net/ManuelCastro8/high-performance-sql-server-workloads-on-hyper-v

Еще одна вещь, которую стоит попробовать - это использовать ESXi вместо Hyper-V или последнюю версию Hyper-V 2012 R2.

Наконец, с полной версией SQL, какая именно версия запускается? Какая именно ОС запускается для гостя и хоста? У вас установлены последние сервисы интеграции?

Похожие вопросы