Консультация по настройке Postgresql на high load нагрузке

5 000 руб. за проект
26 февраля 2024, 19:26 • 10 откликов • 57 просмотров
У меня есть мощный сервер Intel(R) Xeon(R) CPU E5-2695 v4 @ 2.10GHz 72 processes, операционная система Ubuntu 20.04.6 LTS.
На него приходит в среднем 200 запросов в секунду в базу данных и psql не справляется с нагрузкой, многие ответы приходят по 4-50 секунд на обычные SELECT или UDPDATE.

Какая сейчас модель: пользователи присылают запросы на сервер через post/get запросы по API на установленный на nginx flask unicorn веб-сервер, которые добавляются как задания в бд. Другой скрипт берет сразу же полученные задания пачками, после чего делаются математические операции и сохраняются обратно (также пачками в 1 sql запрос, а не по отдельности каждая). Затем пользователи (обычно через 5 секунд) делают запросы на получение результатов.

До 50-100 запросов в секунду сервер еще хорошо выполняет работу (это все запросы пользователей, а не внутренние запросы скриптов, такие как получение заданий и сохранение результатов), но выше уже тормозит база данных.
По htop никаких нагрузок на CPU не наблюдается. По журналу /var/log/postgresql/postgresql-12-main.log выводит логи типа
duration: 9485.843 ms statement: SELECT ...
error: FATAL: the database system is in recovery mode (после чего бд перезагружается)
, но в чем ошибка не ясно.

Устанавливал pgbouncer, не помогло, даже хуже стало. Читал статьи в интернете как настроить psql и pgbouncer под high speed, изменял настройки типа max_connections, shared_buffers и тд. выше значения, но похоже что-то неверно идет.

Прикрепляю к проекту скрин pgAdmin.
Каждые часов 6 наблюдаю странное поведение psql, если запросов до 100 в секунду: база на пару минут заглючивает очень сильно, запросы не принимаются, она сама перезагружается и далее вновь работает. При выше 100 запросов в секунду уже постоянно лагает.

Ищу кто сможет проконсультировать по настройке postgresql и, возможно, подключиться по team viewer для настройки. Конфиги настроек смогу прислать.
Файлы