Назад | Перейти на главную страницу

Проблема с производительностью AWS RDS Postgres

Мы используем rds (postgres) с типом экземпляра db.m4.2xlarge.

Обычно в большинстве случаев количество подключений составляет 8-10. Но в некоторых случаях количество подключений увеличивается до 100-200. БД перестает отвечать. Невозможность реагирования БД мы наблюдали много раз в случаях внезапного всплеска количества или чтения соединений (даже в тех случаях, когда количество соединений увеличилось с 10 до 100).

Запросы, которые выполняются с максимальной скоростью, занимают 2 секунды.

Мой сервер приложений работает в стеке django / python (с Gunicorn). Задержка этих серверов возрастает при увеличении времени отклика сервера БД.

Какие-либо изменения в конфигурации postgres rds, которые мы должны сделать для повышения производительности (в настоящее время большинство настроек по умолчанию)?

У меня была такая же проблема. Postgresql настроен на AWS RDS, и у него было 100% использование процессора даже после увеличения экземпляра. Я отлаживал показанным методом Вот и один из способов у меня сработал.

Я проверил, выполняется ли запрос дольше всего, и узнал, что некоторые запросы зависают и выполняются более 3-4 часов. Чтобы проверить, сколько времени выполняется запрос, выполните следующую команду:

SELECT max(now() - xact_start) FROM pg_stat_activity
                               WHERE state IN ('idle in transaction', 'active');

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

Могу поспорить, что у вас есть один запрос, который работает очень медленно. Когда это запускается, соединения накапливаются позади него. Я бы начал с определения проблемного запроса, а затем выяснил, как его исправить.