Я работал над функциями, чувствительными к производительности. Я занимаюсь разработкой локально, запустив сервер MySQL на моем Mac. На моем компьютере один ключевой запрос выполняется примерно за 1,2 секунды, что для меня приемлемо. Все работало достаточно быстро, поэтому я решил переместить его в базу данных AWS RDS Aurora, чтобы я мог начать использовать новую систему в производстве.
Но как только я начал подключаться к RDS вместо моего локального сервера, запросы начали принимать более чем в два раза пока. И это сравнение времени, необходимого для выполнения фактического запроса, не зависящего от скорости сети. Вот как я измеряю.
Я увеличил количество экземпляров, которые RDS использует для db.r3.4xlarge
, который имеет 122 ГБ оперативной памяти, Intel Xeon E5-2670 v2 (Ivy Bridge) и 16 виртуальных ЦП. Моя локальная машина имеет 32 ГБ оперативной памяти и Intel Core i7 с тактовой частотой 4 ГГц. Я мало что знаю об этом, но похоже, что база данных в облаке работает на более мощном оборудовании, независимо от того, на какую метрику вы смотрите.
Главный вопрос: Что еще я могу изучить, чтобы облачная база данных работала так же быстро, как моя локальная машина?
Вещи, которые казались правдоподобными причинами, но не кажутся:
explain
в начале моих запросов результаты в точности совпадают с планом индекса для обеих БД.Вещи, которые могут быть факторами, но я действительно не знаю:
Я действительно немного растерялся. Если у кого-то есть идеи или советы, мы будем очень признательны!
Я последовал совету Тима в комментариях и подписался на AWS Support, чтобы поговорить с кем-нибудь об этом. Объяснение было:
Aurora создана и адаптирована для рабочих нагрузок с высокой степенью параллелизма. Однопоточная работа вряд ли приведет к впечатляющим результатам, так как также необходимо проверить уровни параллелизма в ваших тестах.
Поэтому, если мы работаем над 1 запросом, маловероятно, что Aurora будет работать так же быстро, как ваша локальная машина.
Еще немного поболтали, потом я попытался использовать RDS MySQL вместо Aurora, и это сработало! Почти так же быстро, как моя локальная машина, с гораздо более дешевым оборудованием.