gpt4 book ai didi

postgresql - Postgres 上的 PGBouncer IDLE 连接未关闭

转载 作者:行者123 更新时间:2023-12-05 04:49:15 24 4
gpt4 key购买 nike

我们有一个运行 6 个 PgBouncer 进程的设置,我们的性能基准随时间呈线性下降。 PgBouncer 运行的时间越长,与 Postgres 的连接存在的时间越长,导致基准测试的响应时间越慢。我们有一个包含 2000 多个关系的 Multi-Tenancy 模式分离数据库。我们现在配置为事务模式池。随着时间的推移,我们看到每个 Postgres 进程的内存占用不断攀升,再一次攀升,这再次导致性能下降。

我们尝试通过以下设置更积极地清理空闲连接:

min_pool_size=0

server_idle_timeout=30 (seconds)

server_lifetime=120 (seconds)

我们看到的问题是,我们总是在 Postgres 中遇到大量空闲连接。当我们用“show pools”监控 PgBouncer 时,我们看到 sv_idle 计数上下波动,所以我们假设这些设置在 PgBouncer 中有效,但这并没有转化为 Postgres 中空闲连接的减少。就好像 PgBouncer 真的没有终止与 Postgres 的 session 。

我四处寻找解决方案并测试了几个不同的选项 - 但一直无法找到任何解决方案。我在其他地方读到有关 cron 作业以从 Postgres 中删除空闲连接的信息,但我真的不想在生产中这样做,而是希望 PgBouncer 完全清除这些空闲连接。

我们在 Postgres 9.6 上使用 PgBouncer 1.15 版

感谢任何帮助。

/**

应该在原始评论中指出这一点——我们有多个 PgBouncer 正在运行,我们正在使用 Unix 套接字来执行此操作。我们不确定这是否会对 Postgres 留下连接产生影响。

**/

谢谢

最佳答案

问题已解决。

应用程序非常活跃,即使将 server_idle_timeout 设置为低至 5 秒,连接也没有在 Postgres 端回收。

我们遇到的问题是 server_lifetime 在我们认为它处于事件状态时被意外评论,一旦我们更改它,我们可以清楚地看到 Postgres 连接每 2 分钟被回收一次(根据我们的设置)。

随着时间的推移,每个连接的内存增加,特别是对于长期连接,只考虑了私有(private)内存而不是共享内存。我们观察到连接存在的时间越长,消耗的内存就越多。我们尝试为 reset_query 设置 DISCARD ALL 之类的东西,它对内存消耗没有影响。根据我的在线研究,我们并不是唯一面临池连接挑战的人。

感谢您的评论和帮助。我们最终的解决方案是利用 pgBouncer 中的 server_lifetime 来控制 Postgres 上的长期连接数。

-玛雅

关于postgresql - Postgres 上的 PGBouncer IDLE 连接未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67664415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com