Postgres调整max_connections

时间:2018-01-13 06:13:25

标签: python postgresql performance config

我有一个多线程进程,36个线程随机写入db,每个平均每10秒一次,每个都有99%的空闲时间(休眠)。

我不确定这是否意味着我有36个活动连接,或者因为每个线程中的睡眠而实际只有一个或两个。可能不相关,但他们都使用相同的用户名。

我应该将配置文件中的max-connections选项减少到36还是减少到像4这样的东西(以反映在任何时刻,几乎肯定不会超过4个同时写入的概率)?

编辑:它的实现是否可能依赖,即我是否编写了我的python代码,无论是否在睡眠时删除连接?

1 个答案:

答案 0 :(得分:2)

这里最好的设置是使用pgbouncer进行连接池: https://pgbouncer.github.io/config.html

default_pool_size = 4将保留与postgres的4个永久连接,在会话完成时将36个池连接到四个中使用其中一个。

我建议使用pooler,因为服务器上的连接是否仍然存在取决于您是否断开连接。僵尸会保持连接,而你的代码会启动新的会话。

简而言之 - 要运行查询,您必须以用户身份连接到数据库。如果您在同一会话上运行另一个事务,则重用该连接(如果您没有断开连接)。您必须明确断开连接以关闭会话。如果您没有这样做,连接将保留在服务器上(使用max_connections个插槽之一。

也是从9.6开始我们有idle_in_transaction_session_timeout,如果它的idla超过n个时段就会杀死交易,这将有助于对抗僵尸。