postgresql“keepalives”参数

zla*_*tko 7 postgresql connection database-connection libpq

根据PostgresSQL 文档,有参数keepalives和更多参数keepalives_idlekeepalives_interval并且keepalives_count仅在以下情况下才相关keepalives=1

但我不清楚如果参数keepalives设置为零意味着什么?

keepalives如果参数设置为零 ( )到底会发生什么keepalives=0

这是否意味着 PostgreSQL 会话永远不会终止?如果客户端应用程序关闭会发生什么?如果网络连接中断会发生什么?这是否意味着 PostgreSQL 服务器永远不会终止空闲会话?

Lau*_*lbe 10

keepalives是客户端设置。

如果将其设置为 0,则客户端计算机上的 TCP 套接字会将SO_KEEPALIVE套接字选项设置为 0(默认设置(在 Linux 上)为 1,表示启用 keepalive)。

然后,它不会在空闲连接上向数据库服务器发送保活消息来检查另一端是否仍然活动。

效果是客户端不会检测数据库服务器是否意外终止,即不关闭 TCP 连接。

通常不需要在客户端启用 keepalive:当服务器下次尝试与服务器通信时,客户端无论如何都会注意到服务器何时死亡。

保活消息的另一个用途是防止防火墙或代理关闭空闲连接。但由于 PostgreSQL 服务器无论如何都会在服务器端启用 keepalive,所以应该注意这一点。

  • > _无论如何,PostgreSQL 服务器都会在服务器端启用 keepalive,这一点应该引起注意。_ 这是什么意思?假设客户端和 Postgres 服务器之间有一个 TCP 代理。Postgres 服务器如何通知代理保持连接处于活动状态?什么机制允许服务器执行此操作? (2认同)