резернуты базы мастер с репликой (репликация с использованием wal-g). Всё это крутится в кластере кубернетеса в контейнерах. Всё исправно работает уже несколько лет.
Чтобы разгрузить мастер решили запросы отчетов направлять на реплику. При этом столкнулись с неприятной ситуацией: когда на реплике прогоняется одновременно несколько тяжёлых запросов с длительностью в несколько минут, то начинаем наблюдать ожидающие http запросы к бэкенду, который соответственно обращается к мастеру. В итоге всё приводит к тому, что на nginx заканчиваются коннекшны и по сути приложение встает.
Кто виноват и что делать?
Причем тут postgres? Соединение с базой идёт не по http
Переделать приложение на асинхронное взаимодействие.
А ведь хороший был комментарий. Сейчас и не могу припомнить состояние запросов на мастер. Надо понаблюдать
1. выясните что за запросы почему их так много и почему долго выполняются (через pg_stat_activity). если там блокировки то старайтесь их устранить (рефакторинг приложения), если запросы долго выполняются, проверяйте их планы (через EXPLAIN) и оптимизируйте либо индексами либо рефакторингом запросов 2. проверьте что не упираетесь в лимит max_connections в постгресе
А что значит репликация с использованием wal-g? Разве wal-g не для бэкапа? Может у вас там синхронная реплика ещё настроена и при нагрузке на последнюю начинают тормозить коммиты на мастере из-за того, что реплика не успевает проиграть wal-ы?
Получается, что у нас синхронная реплика. Т.е. по сути ее нельзя активно использовать для каких-то долгих запросов?
Обсуждают сегодня