我的产品使用 Postgres DB。使用 slick 3 进行批量插入时,我收到一条错误消息:
org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户端了。
我的批量插入操作会超过数千条记录。 我的 postgres 的最大连接数是 100。
如何增加最大连接数?
仅仅增加
max_connections
是个坏主意。您还需要增加 shared_buffers
和 kernel.shmmax
。
注意事项
max_connections
确定数据库服务器的最大并发连接数。默认值通常为 100 个连接。
在增加连接数之前,您可能需要扩大部署规模。但在此之前,您应该考虑是否真的需要增加连接限制。
每个 PostgreSQL 连接都会消耗 RAM 来管理连接或使用它的客户端。您拥有的连接越多,您将使用的 RAM 就越多,可以用来运行数据库。
编写良好的应用程序通常不需要大量连接。如果您的应用程序确实需要大量连接,请考虑使用 pg_bouncer 等工具,它可以为您池化连接。由于每个连接都会消耗 RAM,因此您应该尽量减少它们的使用。
如何增加最大连接数
1。增加
max_connection
和 shared_buffers
在
/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
您需要将内核最大段大小增加到稍大一些
比 shared_buffers
。在文件
/etc/sysctl.conf
中设置参数,如下所示。
postgresql
重启后生效(下面这行让内核最大值为
96Mb
)
kernel.shmmax=100663296
参考文献
如果有人无法在您的设置中找到 postgresql.conf 文件位置,您可以随时询问 postgres 本身。
SHOW config_file;
对我来说,仅更改 max_connections 就可以了。
编辑:来自@gies0r:在Ubuntu 18.04中它位于
/etc/postgresql/11/main/postgresql.conf
他们的文档称,每 1 GB 内存可以获得 112 个连接(无论您有多少内存,连接限制为 5000 个),但我们发现在只有 1 GB 内存的实例中,我们开始收到接近 80 个连接的错误消息。增加到 2 GB 让我们可以毫无问题地使用 110 个连接(可能更多,但这是我们迄今为止尝试过的最多连接)。我们只需几分钟就能将现有实例的内存从 1 GB 增加到 2 GB分钟很容易。
这是相关亚马逊文档的链接:
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections
找到 postgresql.conf
sudo nano /etc/postgresql/14/main/postgresql.conf
最大连接数 = 100 共享缓冲区 = 24MB
max_connections = 300
shared_buffers = 80MB
/opt/homebrew/var/postgresql@14/postgresql.conf
max_connections
设置,您可以按照以下步骤操作:
ALTER SYSTEM SET max_connections TO '200';
SELECT pg_reload_conf();
重要提示:只有重新启动 postgresql 服务器后才会生效。