我正在测试 pgbouncer“暂停”功能,以在需要重新启动数据库时最大限度地减少数据库停机时间。
对于这个测试,我有一个远程 psql 会话通过 pgbouncer 连接到我的数据库。Pgbouncer SHOW CLIENTS 将我的远程会话显示为活动,即使没有运行查询。同一个客户端根据 pg_stat_activity 显示 Idle。当我发出 PAUSE 命令时,它会挂起,直到我关闭远程会话。PAUSE 不应该在不关闭我的连接的情况下工作吗?
我正在测试 pgbouncer“暂停”功能,以在需要重新启动数据库时最大限度地减少数据库停机时间。
对于这个测试,我有一个远程 psql 会话通过 pgbouncer 连接到我的数据库。Pgbouncer SHOW CLIENTS 将我的远程会话显示为活动,即使没有运行查询。同一个客户端根据 pg_stat_activity 显示 Idle。当我发出 PAUSE 命令时,它会挂起,直到我关闭远程会话。PAUSE 不应该在不关闭我的连接的情况下工作吗?
至少对于
pool_mode=session
,看起来只有当其他客户端尚未在其会话中发出任何查询时,“暂停”命令才会成功。如果其他客户端已经发出任何查询,则“暂停;” 命令如您所描述的那样挂起。从 PgBouncer 的角度来看,这基本上是有道理的,因为它不需要在客户端发出任何查询之前给客户端提供真正的连接,但是一旦它执行了“暂停”,就必须等待该客户端完成其会话。