Мой облачный сервер выполняет запрос SQL Server на 50% медленнее после обновления до двухъядерного с одноядерного - PullRequest
0 голосов
/ 19 января 2012

Мое приложение запускает SQL Server 2008 на Windows Server 2008 с использованием Tomcat.

Я использую облачный сервер

Один из моих запросов занимает ровно 48 секунд для запуска из приложения. Он извлекает 425 записей из базы данных.

Я не был удивлен продолжительностью времени.

Хотя аналогичный запрос в Oracle выполнялся за 6 секунд, в установке Oracle было 2 ГБ памяти и четырехъядерный процессор, тогда как в моем SQL Server было установлено 1 ГБ памяти и один процессор 2,66 ГГц.

Поэтому я увеличил спецификации сервера до 2 ГБ. Не было никаких изменений.

Затем я увеличил спецификации сервера до двухпроцессорного с одного процессора. Я был удивлен, обнаружив, что запрос теперь занимает больше времени - ровно 70 секунд!

Мне известно, что преобразование запроса из P / SQL в T / SQL могло быть выполнено очень неэффективно. И могут быть различия в скорости между Oracle и SQL Server. Однако мой главный вопрос действительно заключается в том, почему один и тот же запрос теперь должен выполняться медленнее в двухъядерной системе, чем в одноядерной?

Спасибо!

1 Ответ

0 голосов
/ 19 января 2012

В зависимости от используемого гипервизора и общей нагрузки на сервер, двойные виртуальные процессоры могут привести к (значительно) меньшему использованию процессорного времени, так как планировщик некоторых гипервизоров настаивает на поиске двух процессоров, которые можно планировать одновременно. Если ваш запрос однопоточный, преимущество второго ЦП равно нулю, но сокращение времени ЦП делает его медленнее.

Совершенно противоположное направление - это еще одна возможность: если ваш запрос многопоточный, а хранилище медленное, то 2 потока могут создать случайный шторм ввода-вывода, который уменьшает пропускную способность хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...