Как автоматически завершать долгие запросы в PostgreSQL

Долгие запросы могут вызвать серьёзные проблемы с производительностью PostgreSQL. Рассказываем, как автоматизировать их завершение. Зачем убивать долгие запросы? На практике такие запросы могут: Блокировать таблицы и строки Съедать память и процессор Вызывать дедлоки Мешать миграциям или мониторингу Причины: Пропущенные WHERE-условия Сложные отчёты Подвисшие клиенты Как работает скрипт Мы используем Bash-скрипт для: Подключения к PostgreSQL Поиска запросов старше 60 секунд Автоматического завершения этих запросов Скрипт для завершения долгих запросов 1. Переменные подключения #!/bin/bash PG_CONN="postgres://user:pass@postgres-host/postgres-db" QUERY_TIMEOUT="60" PSQL_RUN="psql $PG_CONN -Atc" 2. SQL-запрос QUERY="SELECT pid FROM pg_stat_activity WHERE now() - query_start > '${QUERY_TIMEOUT} seconds'::interval" 3. Завершение echo "Ищем запросы дольше $QUERY_TIMEOUT секунд..." pids=$(${PSQL_RUN} "$QUERY") for pid in $pids; do echo "Завершаем PID $pid..." ${PSQL_RUN} "SELECT pg_terminate_backend($pid)" done Автоматизация через Cron Чтобы запускать каждые 5 минут: ...

сентября 5, 2025 · 1 минута · 178 слов · DevOps Insights