Почему запрос в базе данных sql server на ВМ отрабатывает медленнее, чем на ПК?
Имеем высокопроизводительный сервер
HP Gen8 360 с двумя Xeon 3690, Озу 128 - 1866 MHz, hyper-v на базе windows server 2012 r2
SmartArray p420i: Первый массив Raid 5 - hdd 500 Гб 7200, Второй массив Raid 1 - hdd ssd 1.9 Тб
Имеем рабочую станцию программиста:
i7-8850H, 16 гб, Windows 10 64 бита.
Sql server 2014 sp3 develop
Суть проблемы: Имеем самописную базу данных в рамках которой выполняется функция.
На рабочей станции программиста скорость выполнения запроса 3 секунды (при последующих запусках тоже)
На сервер 18 секунды (при последующих запусках 16).
В чем может быть причина?
Ради теста на гипервизоре были отключены все виртуальные машины и тест проводился со всеми мощностями.
Были закуплены ssd диски и ВМ была переведены с hdd sas raid 5 на ssd sata raid1
Были проведены тесты по скорости на обоих массивах и скорость повторного запуска не была выше 16 секунду (SQL Server buffer cache)
И ладно бы если скорость была ниже в 2 раза, но тут падение идет в 10 и для меня это не понятно.
Более того, получается что проблема со всеми базами данных скорее всего...
1) В обоих тестах у нас есть только sql 2014 sp3 (develop)
2) ОС системы отличаются - на сервер 2012 r2 на машине разработчика win 10 prof
3) Индексы одинаковые, так как база разворачивается из бекапа и делается запрос.
4) Подсети не участвуют, так как запрос локальной на самой сервере баз данных и он никуда не обращается (внеш. источники.
5) Так как серверы базы данных идентичные, то разбирать сам запрос, какой имеет смысл?
x2sp, пункт 4): запрос на сервер с самого сервера? или с рабочей станции?
Если с рабочей станции, то:
В настройках подключения к серверу в поле адрес сервера указать доменное имя сервера вместо IP-адреса
Просто пальцем в небо:
1. попробовать на рабочей станции по сети, чтобы до сервера был гарантированный tcpip а не shared memory
2. как дела с обслуженностью базы на сервере (статистики, фрагментации и т.п.)
3. что стоит в настройках распараллеливания запросов? (часто планировщик может потратить много времени на само планирование параллельности)
1) Даже в случаи, если мы отправляем запрос с фронтенда (iis), он всего лишь выдает ответ от отработанного запроса. Мы исключили работу с фронтом и начали тестировать локально, чтобы не вешать дополнительных метрик.
2) С обслуживанием все просто, мы разворачиваем полный бекап на двух машинах и тестируем. Поэтому базы находятся в двух одинаковых состояниях.
3) Чуть выше была информация по установке на рабочей станции и на тестовой машине: next, next, next. Поэтому мы и исключили все проблемы, которые могли быть связаны с разной конфигурацией SQL Serverа на машинах.
SELECT [database table]=OBJECT_NAME(object_id),[frag pct]=cast(avg_fragmentation_in_percent as decimal(24,2)), fragment_count
FROM sys.dm_db_index_physical_stats (
DB_ID(
N'database' -- тут имя базы
), NULL, NULL, NULL, NULL)
where avg_fragmentation_in_percent>75 -- уже критично
and alloc_unit_type_desc='IN_ROW_DATA'
and page_count > 50 -- менее 50-100 - пофиг
and index_id>0
order by avg_fragmentation_in_percent desc, sys.dm_db_index_physical_stats.fragment_count desc
x2sp, пункт 4): запрос на сервер с самого сервера? или с рабочей станции?
В любом случае попробуйте в настройках подключения к серверу в поле адрес сервера указать доменное имя сервера вместо IP-адреса
Простите, но вы о чем?
Мы открываем в базе данных "New Query" и запускаем функцию внутри базы данных.
ИП и доменное имя тут причем?
У нас работа только внутри базы данных, без каких либо способов внешнего взаимодейтсвия.
В том числе база данных никуда не обращается во время запроса.
lu1ssuarez, x2sp, ваше друг с другом непонимание происходит от неточной терминологии у автора вопроса:
запрос происходит внутри базы
открываем в базе данных "New Query"
- очевидно имеется в виду SQL Server Management Studio.
Просто нет такого "запрос происходит внутри базы". Management Studio - это всё-таки клиент, хоть и локальный для сервера. И взаимодействует с базой по тем же общим правилам архитектуры "клиент-сервер".
hint000, lu1ssuarez,
Да! Видимо я уже в порывах циклического бегания по кругу начинаю что-то упускать... Спасибо за внесения ясности, но я все таки немного поспорю...
Не думаю что остнастка SMS это клиент в моем случаи, по крайней мере в том виде, в каком это принято понимать в клиент-серверной архитектуре. А именно работа через сеть, потому у нас она отсутствует при локальном подключении.