Подтвердить что ты не робот

Экземпляр Amazon RDS MySQL работает очень медленно

Я опубликовал свой веб-сайт на Amazon EC2 (Сингапурский регион), и я использовал экземпляр MySQL RDS для хранения данных. Все работает очень хорошо, кроме производительности.

Кажется, что все мои запросы, специально выбирающие оператор, работают очень медленно. Если я проверю эту проблему на своем локальном ПК, там она работает очень хорошо. Но когда я пытаюсь получить данные из экземпляра RDS, это происходит очень медленно. Некоторые из операторов select занимают 2-3 секунды для извлечения данных.

Я правильно настроил все табличные индексы и нормализовал/де-нормировал по мере необходимости. Я сделал все необходимые настройки в группе настраиваемых параметров RDS (например, max_connection, buffer и т.д.). Я не знаю, чего-то не хватает, но для меня это не сработало - производительность не увеличилась.

Итак, может кто-нибудь, пожалуйста, помогите мне с этой проблемой?

4b9b3361

Ответ 1

Следует отметить, что по какой-либо причине кеш запросов MySQL по умолчанию отключен в RDS. Мы узнали, что этот трудный путь на этой неделе.

Это не поможет выполнить ваш первоначальный запрос, но это может ускорить работу в целом.

Чтобы снова включить кеш запросов:

  • Войдите в консоль RDS
  • Нажмите на свой экземпляр RDS, чтобы просмотреть его.
  • Изменить группу параметров базы данных
  • Обязательно установите как query_cache_size, так и query_cache_type

(Отказ от ответственности: я не являюсь администратором базы данных, поэтому могут быть дополнительные вещи, которые я здесь отсутствует)

Ответ 2

Важно, чтобы ваши экземпляры RDS и EC2 не были в одном регионе, но в той же зоне доступности, чтобы минимизировать задержку.

У меня был API, размещенный в Ирландии на EC2, и переместил базу данных в кластер MySQL в штате Вирджиния-США, который мы создали для другого проекта, и поездка туда и обратно по каждому SQL-запросу сделала API непригодным.

Ответ 3

Производительность RDS MySQL может быть увеличена следующими способами, предполагая, что система имеет больший коэффициент чтения:

  1. Используйте более крупные типы экземпляров, они имеют лучшую пропускную способность NW. Пример AWS Quadruple EXL поставляется с пропускной способностью 1000 Мбит/с.
  2. Используйте хранилище PIOPS, вы можете извлечь 12 500 IOPS из 16 КБ из базы данных MySQL
  3. Если выполняется много чтения, добавьте одну или несколько Read Read для увеличения производительности чтения
  4. Применяйте стандартные методы, такие как: Настройте запросы, примените индексы и т.д.

Ответ 4

Сначала я настоятельно рекомендую просмотреть эти запросы, используя

ПОКАЗАТЬ ПОЛНЫЙ ПРОЦЕСС-ЛИСТ

Подробнее об этом можно узнать на ПОКАЗАТЬ ПОЛНЫЙ ПРОЦЕССЛСТЫ

Это покажет вам время каждого запроса.

Затем вы можете использовать

EXPLAIN

Подробнее об этом можно узнать на EXPLAIN

Это покажет вам, нужно ли вам немного улучшить ваши запросы.

Ответ 5

Для меня это не имело ничего общего с MySQL, но тип экземпляра я был на t2.medium. Проблема в том, что у меня закончились кредиты ЦП, потому что загрузка на БД была слишком высокой, и баланс продолжал снижаться, пока, наконец, я получал гораздо меньше кредитов ежечасно, тогда, когда это было необходимо.

Вот что я видел в RDS CloudWatch при использовании CPU Credit:

введите описание изображения здесь

Если у вас такая же проблема, возможно, пришло время переключиться на другой экземпляр. Ниже приведен список типов экземпляров:

https://aws.amazon.com/rds/instance-types/

Надеюсь, что это поможет.

Ответ 6

У меня была такая же проблема. Я думаю, что проблема в том, что MariaDB и MySQL по умолчанию используют InnoDB вместо MyISAM! (Ничего не могу сказать о InnoDB). Первоначальное тестирование показывает 15x улучшение для моих запросов.

Ответ 7

Вы можете проверить, где выполняется запрос, используя профилирование. Используйте следующий запрос:

  • set profiling = 1
  • выполнить выбранный запрос
  • показать профиль

Это расскажет вам о состоянии запроса и о том, где запрос тратит свое время. Если сумма всего времени, возвращаемого профилированием, меньше фактического времени выполнения запроса, возможно, причиной этого могут быть другие факторы, такие как пропускная способность сети.