DBAtlas · 数据库运维图谱

维护期间用 PgBouncer 挂起连接(PAUSE/RESUME)并重新加载配置(RELOAD)

PostgreSQLPgBouncer

命令

psql -h 127.0.0.1 -p 6432 -U pgbouncer -d pgbouncer -X
RELOAD;            -- apply pgbouncer.ini and auth_file changes without dropping connections
PAUSE <db>;        -- closes server connections once running queries/transactions finish; new requests are queued
-- ... maintenance: switchover, PostgreSQL restart, etc. ...
RESUME <db>;
-- If the host in [databases] was changed (after RELOAD), gradually refresh server connections:
RECONNECT <db>;

作用

PAUSE 在不断开客户端连接的情况下排空 PostgreSQL 端的连接,并将新查询排队;RESUME 让队列重新流动。这样,短暂的主库重启或主备切换对应用来说只是短暂的延迟,而不是错误。

适用场景

在短时维护窗口(主备切换、小版本重启、参数重启)期间,以及应用 pgbouncer.ini/userlist 变更时。

注意

PAUSE 只有在所有活动事务结束后才返回;长时间运行的查询会拖住 PAUSE(必要时在 PostgreSQL 中终止该会话)。query_wait_timeout(默认 120 s)到期时,等待中的客户端会收到错误;请在此时间内完成维护。PAUSE 后忘记 RESUME 就是完全中断。部分设置(listen_addr、listen_port 等)不会随 RELOAD 改变,需要重启。

在 DBAtlas 中打开 →

相关内容