我有一个多线程进程,其中36个线程随机写入数据库,每个线程平均每10秒写入一次,每个线程有99%的空闲时间(休眠)。
我不确定这是否意味着我有36个活动连接,或者实际上只有一个或两个,因为每个线程中的休眠。可能不相关,但它们都使用相同的用户名。
我应该将配置文件中的max-connections选项减少到36,还是减少到像4这样的小值(以反映在任何时刻,几乎肯定不超过4个同时写入的概率)?
编辑:是否有可能依赖于它的实现,例如,我是如何编写python代码的,而不管连接是否在睡眠时被删除?
发布于 2018-01-14 01:40:22
这里最简洁的设置是使用pgbouncer进行连接池:https://pgbouncer.github.io/config.html
default_pool_size = 4将保留4个到postgres的永久连接,当会话完成时,汇集您的36个连接以使用4个连接中的一个。
我推荐使用pooler,因为服务器上的连接是否持续取决于您是否断开连接。此外,僵尸将保持连接,而您的代码将启动新的会话。
简而言之,要运行查询,您必须以用户身份连接到数据库。如果您在同一会话上运行另一个事务,则重用该连接(如果您没有断开连接)。您必须显式断开连接才能关闭会话。如果您无法做到这一点,连接将保持在服务器上(使用max_connections插槽之一。
同样从9.6开始,我们有了idle_in_transaction_session_timeout,如果它的空闲时间超过n周期,它会杀死事务,这将有助于对抗僵尸。
https://stackoverflow.com/questions/48237410
复制相似问题