我正在尝试pgbouncer.ini
在 Pgbouncer 中调整我的文件,并提出了server_lifetime
我server_idle_timeout
感觉相同的参数。
在官方配置文档中它说:
server_lifetime
pooler 将关闭连接时间超过此时间的未使用的服务器连接。将其设置为 0 意味着连接将只使用一次,然后关闭。[秒]
默认值:3600.0
server_idle_timeout
如果服务器连接空闲超过这么多秒,它将被丢弃。如果为 0,则禁用超时。[秒]
默认值:600.0
你能帮我简单理解一下区别吗?提前致谢!!!?
Pgbouncer 将
server_lifetime
根据pool_mode
. 想象一个恒定负载下的池。如果没有server_lifetime
,pgbouncer 将打开 N 个服务器连接并使用它们数月。这不是那么糟糕,但并不总是可取的。在某些情况下,数据库服务器进程会随着时间的推移占用越来越多的内存(存储过程的缓存、准备好的语句等)。server_lifetime
将在应用程序不知道的情况下关闭旧的服务器连接(如果需要,稍后将建立新的服务器连接)。无论连接有多活跃,都会发生这种情况。另一方面,
server_idle_timeout
将关闭在此期间客户端未使用的与服务器的连接。用例:通常几个到服务器的连接对于这个池来说就足够了。但有时我们有一个活动高峰,我们会打开 50 个连接。当我们处理这个峰值时,不再需要这些额外的连接,我们只需要其中的几个。server_idle_timeout
允许您关闭超过指定时间未使用的服务器连接。server_lifetime
也将关闭此类不需要的连接,但单独的server_idle_timeout
选项将允许设置更短的间隔。从 pgbouncer 的角度来看,未使用的连接是当前未链接到任何客户端连接的连接。这与
pool_mode
以下内容有关:statement
中,服务器连接仅在查询执行期间与客户端链接(并且“使用”)。transaction
中,服务器连接在事务进行时链接到某个客户端。session
,客户端连接链接到服务器连接,直到客户端断开连接。因此,
idle
就 postgresql 视图而言,连接pg_stat_activity
将unused
处于池模式statement
或transaction
. 但在池模式下未知session
- pgbouncer 可以等待来自客户端的进一步命令(因此服务器连接idle
用于 postgresql,但used
用于 pgbouncer)或者此连接当前未分配给任何人(unused
对于 pgbouncer,但idle
对于 postgresql 相同)严格来说,来自 pgbouncer 的服务器连接可以处于以下状态之一:
active
- 链接到客户端的服务器连接。idle
- 未使用且可立即用于客户端查询的服务器连接。used
- 空闲时间超过 server_check_delay 的服务器连接,因此需要在它们上运行 server_check_query 才能再次使用它们。tested
- 当前正在运行 server_reset_query 或 server_check_query 的服务器连接。login
- 当前正在登录的服务器连接。(没有很好的记录,见
SHOW POOLS
描述)used
中的连接tested
和idle
状态在此处检查server_lifetime
条件并在此处调用。这是对从active
/used
/tested
到idle
状态的转换的额外检查。或状态中used
的服务器连接受到或超时。因此,这些超时不会影响客户端。tested
idle
server_lifetime
server_idle_timeout