В настоящее время мое веб-приложение работает на двух облачных серверах Windows 2012 R2: один работает на Tomcat, а другой - на SQL Server Express.Серверы Windows имеют 4 ГБ ЦП Intel XEON® E5-2660 v2 @ 2,20 ГГц
Я тестирую свое приложение на PaaS (платформа как услуга) в Azure.Я создал Linux Web App с Tomcat 9.0 для хранения приложения (P1V2) и Azure SQL Server для хранения базы данных (S2)
Один из тестов, который я провел, заключался в сравнении времени, необходимого для создания отчета в Excel(с использованием Apache POI) в обеих системах.
В облачной системе (под управлением SQL Server Express) это заняло около 10 секунд.В Azure это заняло около 35 секунд.
Очевидно, я бы хотел, чтобы система Azure была как минимум такой же быстрой, как система, основанная на SQL Server Express, особенно потому, что облачная система работает с SQL Server Express, который ограничен 1 ГБ.и 1 ядро.
Я попробовал следующее:
- Проверено, чтобы увидеть, есть ли какие-либо пики на диаграмме панели инструментов для базы данных.Значимых нет - DTU имеют максимум 25%
- Я добавил
Query Performance Insight / Recommendations / Automate
для автоматической настройки базы данных.Это несколько ускорило, но отнюдь не достаточно. - Я прочитал Справка, производительность моего сайта Azure отстой! и Почему выполнение запроса в SQL Azure намного медленнее? и медленный SQL-запрос Azure
- Я проверил, что база данных и приложение находятся в одном месте.(Западная Европа)
Я предполагаю, что проблема в базе данных.
В качестве примера я нашел запрос (с помощью Insight Performance Insight / долго выполняющихся запросов), который выполняется в 2 секунды в Azure и в 0 секунд в SQL Server Express.Обратите внимание, что я НЕ спрашиваю, как оптимизировать этот запрос.Скорее я представляю, что тот факт, что этот запрос занимает больше времени в Azure - с той же схемой базы данных, теми же данными и теми же индексами - может быть подсказкой о том, как ускорить мое приложение в целом.
SELECT cp.*
,(
SELECT min(market_date)
FROM mydb.rates ms
WHERE ms.curr1 = cp.curr1
AND ms.curr2= cp.curr2
) MIN_MARKETDATE
FROM pairs cp
order by curr1, curr2