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

问题描述 投票:0回答:8

我的产品使用 Postgres DB。使用 slick 3 进行批量插入时,我收到一条错误消息:

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

我的批量插入操作会超过数千条记录。 我的 postgres 的最大连接数是 100。

如何增加最大连接数?

postgresql
8个回答
443
投票

仅仅增加

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用于缓存数据

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

2。更改 kernel.shmmax

您需要将内核最大段大小增加到

稍大一些shared_buffers

在文件

/etc/sysctl.conf

中设置参数,如下所示。 
postgresql
重启后生效(下面这行让内核最大值为
96Mb

kernel.shmmax=100663296


参考文献

Postgres 最大连接数和共享缓冲区

调整您的 PostgreSQL 服务器


101
投票
添加Winnie的精彩答案,

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

SHOW config_file;
对我来说,仅更改 max_connections 就可以了。

编辑:来自@gies0r:在Ubuntu 18.04中它位于

/etc/postgresql/11/main/postgresql.conf
    

14
投票
如果您的 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


3
投票
    通过以下命令找到 postgresql.conf 文件
找到 postgresql.conf

    通过以下命令编辑 postgresql.conf 文件
sudo nano /etc/postgresql/14/main/postgresql.conf

  1. 改变

    最大连接数 = 100 共享缓冲区 = 24MB

max_connections = 300 shared_buffers = 80MB
    

2
投票
适用于 Mac M1 用户

/opt/homebrew/var/postgresql@14/postgresql.conf


1
投票
更改 max_connections 变量 在位于的 postgresql.conf 文件中 /var/lib/pgsql/data 或 /usr/local/pgsql/data/


0
投票
对于在 docker/kubernetes 中运行的 postgres 13,路径是: /var/lib/postgresql/data/postgressql.conf 更新 max_connections = 300 并重新启动容器/pod


-2
投票
如果您想使用 SQL 命令调整 PostgreSQL 中的

max_connections

 设置,您可以按照以下步骤操作:

ALTER SYSTEM SET max_connections TO '200'; SELECT pg_reload_conf();
重要提示:只有重新启动 postgresql 服务器后才会生效。

© www.soinside.com 2019 - 2024. All rights reserved.