PostgreSQL 连接数限制错误

问题描述

Gitlab 组件日志(例如 sidekiq、webservice、praefect)显示数据库错误,如:pq: sorry, too many clients already

根本原因

Gitlab 打开的并发 PostgreSQL 连接数超过了数据库允许的最大值(超过了 PostgreSQL 的 max_connections)。

故障排查

检查 Gitlab Deployment 的日志,确认是否存在 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

解决方案

如果 PostgreSQL 的 max_connections 对于您的 Gitlab 规模来说过低,请在 PostgreSQL 端增加该值。具体步骤取决于您如何管理 PG,超出本文范围。

您可以使用以下命令检查 PostgreSQL 的容量和当前使用情况:

-- 显示此 PostgreSQL 实例允许的全局最大并发连接数。
-- 注意:非超级用户可用的有效限制 ≈ max_connections - superuser_reserved_connections。
SHOW max_connections;

-- 显示为超级用户保留的连接数,
-- 以便管理员在所有普通连接槽被占用时仍能登录。
SHOW superuser_reserved_connections;

-- 统计当前所有数据库及状态下打开的后端连接总数
-- (例如,活跃、空闲、事务中空闲、自动清理、复制)。
SELECT count(*) AS current_connections FROM pg_stat_activity;