Мы используем 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');
Если это больше часа, то проблема в этом. Убейте длительное соединение и ограничьте максимальный возраст соединения со стороны приложения.
Могу поспорить, что у вас есть один запрос, который работает очень медленно. Когда это запускается, соединения накапливаются позади него. Я бы начал с определения проблемного запроса, а затем выяснил, как его исправить.