我server_lifetime
在 PgBouncer 配置中找到了选项,我试图弄清楚我们的情况是否真的需要它。
https://pgbouncer.github.io/config.html
pooler 将尝试关闭连接时间超过此时间的服务器连接。将其设置为 0 意味着连接将只使用一次,然后关闭。[秒]
默认值:3600.0
关闭和重新打开连接是什么感觉?
为什么医生说“会尝试”?PgBouncer 可能会在此操作中失败吗?
我server_lifetime
在 PgBouncer 配置中找到了选项,我试图弄清楚我们的情况是否真的需要它。
https://pgbouncer.github.io/config.html
pooler 将尝试关闭连接时间超过此时间的服务器连接。将其设置为 0 意味着连接将只使用一次,然后关闭。[秒]
默认值:3600.0
关闭和重新打开连接是什么感觉?
为什么医生说“会尝试”?PgBouncer 可能会在此操作中失败吗?
这是 pgBouncer 或任何池化软件的基础 - pgBouncer 的主要工作是重用 PostgreSQL 连接。对于短会话创建大量连接可能非常昂贵 - 使用快速查询。当可以为更多客户端共享(重用)物理连接时,您可以获得更快的执行速度。
pgbouncer 和类似软件的第二个重要作用是防止过载。PostgreSQL 没有内部池——任何连接的用户都可以运行任何 SQL。有很多应用程序具有长时间的空闲连接。这些应用程序需要很高的
MAX_CONNECTION
数量。隐藏的假设是这些连接上的低活动。但有时可能会有相当高的活动,对新连接的请求非常高,并且数据库可能会过载。MAX_CONNECTION
应该是大约 10 个 CPU 内核。值不足并不能保护数据库免于过载并以失败告终。对于这些应用程序可以是 pgbouncer 安全解决方案 - 该软件能够为许多客户端共享物理空闲连接。强制将
server_lifetime
分配的源返回给操作系统。一些源(如内存)是内部管理的,并且(通常)较新地返回到操作系统。一些内存昂贵的操作可能需要大量内存。第一次从系统分配此内存。下次这个内存只由 PostgreSQL 管理——它更便宜、更快。但有时它也可能无效。pgbouncer 不知道哪个进程已预先分配内存 - 有时内存可以更好地使用。保障措施是server_lifetime
。一小时是保守值 - 并且可以更短 - 10分钟。pgbouncer 仅关闭非活动连接 - 因此,如果任何客户端使用该连接:打开的事务、长时间的活动命令、..server_lifetime
无法应用。