Автор разобрал три инцидента с PostgreSQL, связанных с деградацией производительности и блокировками. В первом случае массовое обновление привело к раздуванию таблицы и росту дисковых операций. Проблему решили с помощью pg_repack, разбиения обновлений на батчи, установки fillfactor 80 и настройки параметров автовакуума.
Второй инцидент был вызван зависшей транзакцией, которая заблокировала выполнение ALTER TABLE и выстроила очередь из запросов. Команда внедрила lock_timeout 3 секунды, установила idle_in_transaction_session_timeout 5 минут и вынесла внешние HTTP-вызовы за пределы транзакций.
Третий случай связан с дедлоками при параллельной обработке очереди задач. Проблему устранили, зафиксировав порядок обновления строк по первичному ключу, добавив SKIP LOCKED в запросы на выборку и сократив размер транзакций до одной задачи.
Для контроля состояния базы команда настроила алерты на длительные транзакции, зависшие соединения, ожидание блокировок и накопление мертвых версий строк. Это позволяет выявлять узкие места до того, как они повлияют на работу пользователей.





