根据 PostgresSQL docs有参数 keepalives
和进一步的参数 keepalives_idle
, keepalives_interval
和 keepalives_count
只有当 keepalives= 1
。
但我不清楚如果参数 keepalives
设置为零是什么意思?
如果 keepalives
参数设置为零 (keepalives=0
),究竟会发生什么?
这是否意味着 PostgreSQL session 永远不会终止?如果客户端应用程序关闭会怎样?如果网络连接断开会怎样?这是否意味着 PostgreSQL 服务器永远不会终止空闲 session ?
最佳答案
keepalives
是客户端设置。
如果将其设置为 0,则客户端计算机上的 TCP 套接字会将 SO_KEEPALIVE
套接字选项设置为 0(默认设置(在 Linux 上)为 1,这意味着启用了 keepalive) .
然后它不会在空闲连接上向数据库服务器发送 keepalive 消息来检查另一端是否还活着。
效果是客户端不会检测数据库服务器是否意外终止,即不关闭TCP连接。
通常没有必要在客户端启用 keepalive:当客户端下次尝试与它通信时,客户端会注意到服务器何时挂掉。
keepalive 消息的另一个用途是防止防火墙或代理关闭空闲连接。但是,由于 PostgreSQL 服务器无论如何都会在服务器端启用保活,因此应该注意这一点。
关于postgresql "keepalives"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46879146/