我使用 Postgres 数据库为我的产品。在使用 slick 3进行批量插入时,我收到了一条错误消息:
例外: FATAL: 对不起,已经有太多客户端了。
我的批量插入操作将有上千条记录。 我邮递员的最大连接数是100。
如何增加最大连接?
更改 max _ connect 变量 中的 postgreql.conf 文件中 /var/lib/pgsql/data 或/usr/local/pgsql/data/
仅仅增加 max_connections是不好的,你还需要增加 shared_buffers和 kernel.shmmax。
max_connections
shared_buffers
kernel.shmmax
考虑因素
max_connections确定到数据库服务器的最大并发连接数。默认为100个连接。
在增加连接计数之前,可能需要扩展部署。但在此之前,您应该考虑是否真的需要增加连接限制。
每个 PostgreSQL 连接使用 RAM 来管理连接或使用它的客户机。您拥有的连接越多,您将使用的内存就越多,这些内存可以用来运行数据库。
一个编写良好的应用程序通常不需要大量的连接。如果你的应用程序确实需要大量的连接,那么可以考虑使用 保镖这样的工具,它可以为你提供连接池。由于每个连接都消耗 RAM,因此应该尽量减少它们的使用。
如何增加最大连接
1. 增加 max_connection和 shared_buffers
max_connection
在 /var/lib/pgsql/{version_number}/data/postgresql.conf
/var/lib/pgsql/{version_number}/data/postgresql.conf
改变
max_connections = 100 shared_buffers = 24MB
到
max_connections = 300 shared_buffers = 80MB
shared_buffers配置参数决定了对于 缓存数据来说,记忆在多大程度上是 专心致志到 PostgreSQL。
2. 更改 kernel. shmmax
您需要增加内核 max 段大小,使其 < strong > 略大一些 而不是 shared_buffers。
在 /etc/sysctl.conf文件中设置如下所示的参数。它将在 postgresql重新启动时生效(下面的代码行使内核 max 变为 96Mb)
/etc/sysctl.conf
postgresql
96Mb
kernel.shmmax=100663296
参考文献
Postgres 最大连接和共享缓冲区
优化 PostgreSQL 服务器
再加上温妮的绝妙回答,
如果有人无法在您的设置中找到 postgreql.conf 文件位置,您总是可以询问 postgres 本身。
SHOW config_file;
对我来说,仅仅改变 max _ connect 就可以解决问题。
编辑 : 来自@gies0r: 在 Ubuntu 18.04中,它是在
/etc/postgresql/11/main/postgresql.conf
如果 postgres 实例由 Amazon RDS 托管,Amazon 将根据可用内存量为您配置最大连接。
他们的文档显示,每1GB 内存可以获得112个连接(无论您拥有多少内存,连接数限制为5000) ,但是我们发现,在一个只有1GB 内存的实例中,我们开始获得接近80个连接的错误消息。增加到2GB 让我们可以毫无问题地使用110个连接(可能还会更多,但这是我们迄今为止尝试的最多的连接)我们能够在几分钟内轻松地将现有实例的内存从1GB 增加到2GB。
下面是相关亚马逊文档的链接:
Https://docs.aws.amazon.com/amazonrds/latest/userguide/chap_limits.html#rds_limits
定位 postgreql.conf
Sudo nano/etc/postgreql/14/main/postgreql.conf
Max _ links = 100 Share _ buffer = 24 MB