如何增加postgres的最大连接数?

Jet*_*Jet 83 postgresql

我正在使用Postgres DB作为我的产品.在使用光滑3进行批量插入时,我收到一条错误消息:

org.postgresql.util.PSQLException:致命:抱歉,已经有太多客户了.

我的批量插入操作将超过数千条记录.我的postgres的最大连接数为100.

如何增加最大连接数?

Ank*_*kit 163

只是增加 max_connections是坏主意.你需要增加shared_bufferskernel.shmmax为好.


注意事项

max_connections确定与数据库服务器的最大并发连接数.默认值通常为100个连接.

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

每个PostgreSQL连接都使用RAM来管理连接或使用它的客户端.您拥有的连接越多,您将使用的RAM就越多,可以用来运行数据库.

一个编写良好的应用程序通常不需要大量的连接.如果您的应用程序确实需要大量连接,那么请考虑使用pg_bouncer之类的工具,它可以为您提供连接.由于每个连接消耗RAM,您应该寻求最小化它们的使用.


如何增加最大连接数

1.增加max_connectionshared_buffers

/var/lib/pgsql/data/postgresql.conf

更改

max_connections = 100
shared_buffers = 24MB
Run Code Online (Sandbox Code Playgroud)

max_connections = 300
shared_buffers = 80MB
Run Code Online (Sandbox Code Playgroud)

所述shared_buffers配置参数确定多少存储器专用到PostgreSQL用于高速缓存数据.

  • 如果您的系统具有1GB或更多的RAM,则shared_buffers的合理起始值是系统内存的1/4.
  • 您不太可能发现使用超过40%的RAM工作比较小的工作(如25%)
  • 请注意,如果您的系统或PostgreSQL构建是32位,则将shared_buffers设置为2~2.5GB以上可能并不实际.
  • 请注意,在Windows上,shared_buffers的大值不是那么有效,并且您可能会发现更好的结果使其保持相对较低并且更多地使用OS缓存.在Windows上,有用范围是64MB到512MB.

2.更改kernel.shmmax

您将需要增加内核的最大片段大小要稍大shared_buffers.

在文件中/etc/sysctl.conf设置参数如下所示.它将在postgresql重新启动时生效(以下行使内核最大化96Mb)

kernel.shmmax=100663296
Run Code Online (Sandbox Code Playgroud)

参考

Postgres Max连接和共享缓冲区

调整PostgreSQL服务器

  • 您可以使用[PGTune](https://pgtune.leopard.in.ua/)帮助您确定系统的这些设置 (3认同)
  • 在更改之前,请检查当前的kernel.shmmax设置(`cat / proc / sys / kernel / shmmax`)。在现代系统上,它的设置已经很高得可笑了,不应该更改。在Ubuntu 18.04上,我的默认设置为`18446744073692774399'。 (3认同)
  • 来自链接的文章:“一般来说,好的硬件上的 PostgreSQL 可以支持几百个连接”。您的说法“编写良好的应用程序通常不需要大量连接”仅适用于低流量应用程序。如果每个会话在数据库上需要 0.05 秒,则最多可以提供 0.05 秒的服务。每秒 2000 个客户端。即使 pgbouncer(你绝对应该使用它!)也无法解决这个问题。如果您需要每秒服务 5000 个客户端,则需要 250 个连接,依此类推。否则你会看到来自 pgbouncer 的“query_wait_timeout”。如果您有 >=16G RAM 和足够的 CPU 核心(8+),那绝对没问题。 (3认同)
  • 100663296字节= 96 MB(二进制)。shmmax是*共享内存段的最大大小*。现在,由于我们增加了共享缓冲区的大小,因此我们需要更改shmmax以适应增加的内存以进行缓存。 (2认同)
  • @Robbo_UK 96 * 1024 * 1024 = 100663296 (2认同)

Jin*_*oss 17

加入Winnie的绝佳答案,

如果有人无法在您的设置中找到postgresql.conf文件位置,您可以随时询问postgres本身.

SHOW config_file;
Run Code Online (Sandbox Code Playgroud)

对我来说,单独更改max_connections就可以了.

  • 谢谢。在 Ubuntu 18.04 中,它是 ```/etc/postgresql/11/main/postgresql.conf ``` (7认同)
  • 您还可以查询`pg_settings`:`SELECT name, setting FROM pg_settings;` (3认同)

Art*_*are 13

如果您的 postgres 实例由 Amazon RDS 托管,Amazon 会根据可用内存量为您配置最大连接数。

他们的文档称,每 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