• Русский
  • Ошибка ограничения подключений PostgreSQL

    Описание проблемы

    В логах компонентов Gitlab (например, sidekiq, webservice, praefect) появляются ошибки базы данных, такие как: pq: sorry, too many clients already

    Корневая причина

    Gitlab открыл больше одновременных подключений к PostgreSQL, чем разрешено базой данных (превышено значение PostgreSQL max_connections).

    Поиск и устранение неисправностей

    Проверьте логи Deployments Gitlab. Подтвердите наличие сообщения об ошибке pq: sorry, too many clients already.

    kubectl -n <NAMESPACE> logs <RELEASE>-praefect-xxxxx
    kubectl -n <NAMESPACE> logs <RELEASE>-sidekiq-all-in-1-v2-xxxxx
    kubectl -n <NAMESPACE> logs <RELEASE>-webservice-default-xxxxx

    Решение

    Если значение max_connections в PostgreSQL слишком низкое для вашего масштаба Gitlab, увеличьте его на стороне PostgreSQL. Конкретные шаги зависят от способа управления PG и выходят за рамки данного документа.

    Вы можете использовать следующую команду для проверки емкости PostgreSQL и текущего использования:

    -- Показать глобальный верхний предел одновременных подключений, разрешенных этим экземпляром PostgreSQL.
    -- Примечание: эффективный предел для не-суперпользователей ≈ max_connections - superuser_reserved_connections.
    SHOW max_connections;
    
    -- Показать, сколько подключений зарезервировано для суперпользователей,
    -- чтобы администраторы могли войти, когда все обычные слоты заняты.
    SHOW superuser_reserved_connections;
    
    -- Подсчитать общее количество в данный момент открытых фоновых подключений во всех базах данных и состояниях
    -- (например, активные, простаивающие, простаивающие в транзакции, autovacuum, репликация).
    SELECT count(*) AS current_connections FROM pg_stat_activity;