如何增加最大连接在 postgres?

我使用 Postgres 数据库为我的产品。在使用 slick 3进行批量插入时,我收到了一条错误消息:

例外: FATAL: 对不起,已经有太多客户端了。

我的批量插入操作将有上千条记录。 我邮递员的最大连接数是100。

如何增加最大连接?

389776 次浏览

更改 max _ connect 变量 中的 postgreql.conf 文件中 /var/lib/pgsql/data 或/usr/local/pgsql/data/

仅仅增加 max_connections是不好的,你还需要增加 shared_bufferskernel.shmmax


考虑因素

max_connections确定到数据库服务器的最大并发连接数。默认为100个连接。

在增加连接计数之前,可能需要扩展部署。但在此之前,您应该考虑是否真的需要增加连接限制。

每个 PostgreSQL 连接使用 RAM 来管理连接或使用它的客户机。您拥有的连接越多,您将使用的内存就越多,这些内存可以用来运行数据库。

一个编写良好的应用程序通常不需要大量的连接。如果你的应用程序确实需要大量的连接,那么可以考虑使用 保镖这样的工具,它可以为你提供连接池。由于每个连接都消耗 RAM,因此应该尽量减少它们的使用。


如何增加最大连接

1. 增加 max_connectionshared_buffers

/var/lib/pgsql/{version_number}/data/postgresql.conf

改变

max_connections = 100
shared_buffers = 24MB

max_connections = 300
shared_buffers = 80MB

shared_buffers配置参数决定了对于 缓存数据来说,记忆在多大程度上是 专心致志到 PostgreSQL。

  • 如果您的系统具有1GB 或更大的 RAM,那么一个合理的起点 Share _ buffer 的值是系统内存的1/4。
  • 你不太可能发现使用超过40% 的内存工作得更好 而不是更少的数量(比如25%)
  • 请注意,如果您的系统或 PostgreSQL 构建是32位的,那么它可能 将 share _ buffer 设置在2 ~ 2.5 GB 以上是不切实际的。
  • 注意,在 Windows 上,share _ buffer 的大值不像 有效,你可能会发现更好的结果保持相对较低 而更多地使用 OS 缓存 64MB 到512MB

2. 更改 kernel. shmmax

您需要增加内核 max 段大小,使其 < strong > 略大一些 而不是 shared_buffers

/etc/sysctl.conf文件中设置如下所示的参数。它将在 postgresql重新启动时生效(下面的代码行使内核 max 变为 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

  1. 通过以下命令定位 postgreql.conf 文件

定位 postgreql.conf

  1. 通过以下命令编辑 postgreql.conf 文件

Sudo nano/etc/postgreql/14/main/postgreql.conf

  1. 改变

    Max _ links = 100 Share _ buffer = 24 MB

max_connections = 300
shared_buffers = 80MB