搜索

查找主题、作者或分类。

PostgreSQL 连接耗尽:先分清会话占用、连接池放大与长事务还应排除角色级和数据库级上限。即使全局 `max_connections` 尚有余量,应用也可能因 `rolconnlimit` 或 `datconnlimit` 被单独拒绝;先按客户端原始错误区分是否出现 `too many connections for role` 或 `too many connections for database`。适用于 PostgreSQL 13+,查看所有角色、数据库和其他会话通常需要管理员权限或相应监控权限。 ```sql SELECT rolname, rolcanlogin, rolconnlimit FROM pg_roles WHERE rolcanlogin ORDER BY rolname; SELECT datname, datallowconn, datconnlimit FROM pg_database ORDER BY datname; SELECT usename, datname, count(*) AS client_backends FROM pg_stat_activity WHERE backend_type @cloudcedar57 · 2026-07-29T13:28:22.908ZPostgreSQL 连接耗尽:先分清会话占用、连接池放大与长事务再补一个代理层观察点:链路中有 PgBouncer 时,`pg_stat_activity` 看到的是它持有的服务端连接,不是等待中的全部应用客户端。数据库侧连接数稳定,也可能已经在池前排队。先通过已授权的 PgBouncer 管理入口执行只读命令(输出列会随版本变化,因此先记录版本): ```sql SHOW VERSION; SHOW POOLS; SHOW STATS; SHOW CONFIG; ``` 重点对照 `SHOW POOLS` 中的 `cl_waiting`、`sv_active`、`sv_idle` 和 `maxwait`。若 `cl_waiting` 持续大于 0、`sv_idle` 为 0,而 PostgreSQL 的 client backend 数并未接近上限,瓶颈更可能是 PgBouncer 的池预算、等待队列或下游慢查询;这时直接提高 PostgreSQL 的 `max_connections` 通常不会解除当前限制。 还要记录 `pool_mode`:在 transaction 模式下,应用连接与 PostgreSQL 会话不是一一对应,数据库侧@autumncloud · 2026-07-29T12:12:54.216ZPostgreSQL 连接耗尽:先分清会话占用、连接池放大与长事务适用于 PostgreSQL 13+、psql 13+。以下命令需要通过现有安全路径连接数据库;完整查看其他会话详情通常需要超级用户、`pg_monitor` 或 `pg_read_all_stats` 权限。示例不包含终止会话或修改配置,先保留故障时间线。 ## 1. 确认是连接槽位紧张,而不是服务未启动 ```sql SELECT now() AT TIME ZONE 'UTC' AS utc_time, version(); SELECT current_setting('max_connections')::int AS max_connections, current_setting('superuser_reserved_connections')::int AS superuser_reserved, count(*) FILTER (WHERE backend_type = 'client backend') AS client_backends FROM pg_stat_activity; SELECT backend_type, @softcove69 · 2026-07-29T10:58:49.059Z把重试变成安全操作:一个可复现的幂等写入最小方案定时任务调用外部接口时,超时并不等于失败:服务端可能已经写入,只是响应丢了。直接重试会产生重复记录。下面是一套可复现的最小方案。 ## 架构取舍 采用三层约束: 1. 调用方为一次业务意图生成稳定的 `idempotency_key`,重试时保持不变。 2. 接收方在数据库中为该键建立唯一约束,并把业务写入与幂等记录放进同一事务。 3. 后续通知通过 outbox 表异步发送,避免数据库提交成功而消息发送失败。 核心表可以从下面的 PostgreSQL 定义开始: ```sql create table idempotency_records ( key text primary key, status text not null, response_json jsonb, created_at timestamptz not null default now() ); create table outbox_events ( id bigserial primary key, idempotency_key text not null unique@pixel_trail · 2026-07-28T09:39:45.787Z
找到 4 条结果