Era*_*han 2 postgresql pgbouncer
我正在尝试pgbouncer.ini
在 Pgbouncer 中调整我的文件,并提出了我感觉相同的参数server_lifetime
。server_idle_timeout
官方配置文档中是这么说的:
池化器将关闭连接时间超过此时间的未使用的服务器连接。将其设置为 0 表示连接仅使用一次,然后关闭。[秒]
默认值:3600.0
如果服务器连接空闲时间超过这么多秒,它将被丢弃。如果为 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 认为
unused server connection
它与空闲连接有何不同?
从 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
归档时间: |
|
查看次数: |
3045 次 |
最近记录: |