Проблема:
Попытка получить такую же (или лучшую) производительность с отдельным сервером SQL Server 2017 и IIS 7.5, чем с обоими на одном компьютере.
Пытаемся перейти к масштабируемости для будущего роста.
Используя WebSurge для проверки скорости на одном устройстве, на котором работают и IIS, и SQL Server 2017 Developer с 32 ГБ оперативной памяти на 6 ядрах и 12 логических процессорах, на компьютере нет серьезных проблем с производительностью. Мы можем запустить приведенный ниже код в WebSurge со скоростью 4000 запросов в секунду с большой скоростью.
Эта проблема:
После того, как мы запустим один и тот же код на отдельном IIS-сервере и отдельном SQL-сервере на одном и том же гигабитном соединении в локальной сети, мы сможем получать только около 350 запросов в секунду на IIS, работающем на отдельном сервере. Примечание. SQL Server использует <1% ЦП на компьютере, на котором он работает, с этими 350 запросами, поэтому это не проблема с запросом или производительностью SQL Server, поскольку тот же код работает более 4000 с IIS на том же компьютере.
Кабели LAN подключены к одному коммутатору, и PING всегда составляет <1 мс от IIS до SQL Server.
Что мы делаем не так, когда завершенные запросы так сильно замедляются, но при повторном запуске на том же сервере IIS / SQL Server ... это более 4000 в секунду.
Мы планируем создать большую службу в ближайшее время, когда веб-трафик будет превышать 4000 запросов в секунду, поэтому нам потребуются дополнительные серверы, балансировщики нагрузки и т. Д. В настоящее время мы пытаемся понять, почему мы можем обрабатывать только 350 запросов в секунду из окна IIS. , не на том же компьютере, что и сервер.
Я также отмечу, что ни в одном из сценариев загрузка ЦП не превышает 50%.
SQL Server потребляет только около 10% при запуске этого кода.
<%
rangedb="Provider=SQLOLEDB;" & _
"Data Source=10.10.1.220,1433;" & _
"Initial Catalog=xxxxxxx;" & _
"Network=DBMSSOCN;" & _
"User Id=xxxxxx;" & _
"Password=xxxxxx"
set cnn = Server.CreateObject("ADODB.Connection")
set rst = Server.CreateObject("ADODB.RecordSet")
cnn.open rangedb
sqltext = "SELECT page_content,template_id FROM master_templates_data where (template_id='165' or template_id='166' or template_id='167' or template_id='168' or template_id='169' or template_id='170' or template_id='171' or template_id='172' or template_id='173' or template_id='182' or template_id='183' or template_id='184' or template_id='185' or template_id='186' or template_id='187' or template_id='188' or template_id='189')"
rst.CursorLocation=2
rst.CursorType=0
rst.LockType=1
rst.Open sqltext,cnn
dataArray = rst.GetRows()
rst.close
cnn.close
%>
Мы просмотрели весь Интернет и не нашли этому причину.
Любая помощь будет оценена по достоинству!
(Да, мы знаем, что классический ASP не подходит для такого проекта, но мы хотели бы решить эту проблему в наших текущих ситуациях)
Если есть лучшая альтернатива, такая как MySQL и PHP / Linux, мы будем открыты для определения того, как будет лучше производительность.
Это наша первая публикация здесь, поэтому будьте добры :)
Кроме того, мы попытались запустить SELECT 1 в качестве запроса, и он увеличился примерно до 800 об / с в отдельном поле IIS, но перескакивает до 14 000 в поле, где IIS и SQL находятся вместе.
Попытка найти, где происходит сбой в скорости, поскольку мы находимся в гигабитной интрасети, ящики подключены к одному коммутатору, а пинг составляет <1 мс
В настоящее время для этого тестирования не активированы никакие вирусы или брандмауэры, чтобы их исключить.
ОБНОВИТЬ:
Я подключил 2 компьютера напрямую друг к другу, а также подключил их к одному коммутатору и провел тест пропускной способности, и мне удалось достичь скорости чуть ниже 1 ГБ с передачей данных (без передачи файлов), поэтому соединение на должном уровне появляется.
Я также повторно провел тест веб-сервера и получил около 900 запросов в секунду, обработанных с IIS, находящимся в отдельном ящике с другим компьютером.
Кажется, что IIS ASP и SQL на двух разных машинах работают в 4 раза медленнее с использованием того же сценария и программного обеспечения, что и на локальном компьютере.
БД извлекается с твердотельного накопителя, поэтому скорость диска не должна быть проблемой, так как это будет проблемой и локально (драйвер находится на компьютере с SQL-сервером, а не на файловом сервере)
Вы должны убедиться, что настройки дуплекса на вашем нике совпадают. Всегда должен быть одинаковый параметр дуплекса, будь то везде АВТО или полный дуплекс 1 Гбит / с. Это означает проверку настройки дуплекса на сетевых картах каждого сервера, а также на любом оборудовании между ними, например коммутаторе.
Затем я бы запустил wirehark на обоих модулях и получил бы следы сетевой активности, происходящей во время выполнения тестов, и посмотрел бы, не всплывает ли что-нибудь необычное или они не совпадают должным образом.