【问题标题】:How to increase the max connections in postgres?如何增加 postgres 中的最大连接数?
【发布时间】:2015-08-26 23:38:04
【问题描述】:

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

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

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

如何增加最大连接数?

【问题讨论】:

  • 使用 pgBouncer 或 pgPool 之类的连接池
  • 1.首先检查您的中间件是否没有保持太多连接打开,或者是否正在泄漏它们。 2.(也许)接下来使用连接池。 3.(几乎)永远不要增加此类问题的允许连接数,在大多数情况下,这会使事情变得更糟。 (除非你绝对确定)
  • 另请参阅stackoverflow.com/a/58373811/1609929,了解使用 SQL 命令而不是配置的选项。

标签: postgresql


【解决方案1】:

只增加max_connections 是个坏主意。您还需要增加shared_bufferskernel.shmmax


注意事项

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

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

每个 PostgreSQL 连接都会消耗 RAM 来管理连接或使用它的客户端。您拥有的连接越多,您将使用的 RAM 就越多,而这些 RAM 可用于运行数据库。

编写良好的应用通常不需要大量连接。如果您的应用程序确实需要大量连接,请考虑使用诸如pg_bouncer 之类的工具,它可以为您汇集连接。由于每个连接都会消耗 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,则合理的启动 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重启时生效(下面这行使内核max为96Mb

kernel.shmmax=100663296

参考文献

Postgres Max Connections And Shared Buffers

Tuning Your PostgreSQL Server

【讨论】:

  • 很好的答案。几个问题.. 100663296 怎么等于 96MB?为什么我们要改变 shmmax 有什么作用?
  • 100663296 字节 = 96 MB(二进制)。 shmmax 是共享内存段的最大大小。现在因为我们增加了共享缓冲区的大小,我们需要更改 shmmax 以适应增加的缓存内存。
  • @Robbo_UK 96 * 1024 * 1024 = 100663296
  • 您可以使用PGTune 帮助您确定系统的这些设置
  • 在更改之前检查您当前的 kernel.shmmax 设置 (cat /proc/sys/kernel/shmmax)。在现代系统上,它已经设置得高得离谱,不应该改变。在 Ubuntu 18.04 上,我的默认设置为 18446744073692774399
【解决方案2】:

添加到 Winnie 的精彩答案,

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

SHOW config_file;

对我来说,仅更改 max_connections 就成功了。

编辑:来自@gies0r:在 Ubuntu 18.04 中

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

【讨论】:

  • 谢谢。在 Ubuntu 18.04 中是 /etc/postgresql/11/main/postgresql.conf
  • 也可以查询pg_settings:SELECT name, setting FROM pg_settings;
【解决方案3】:

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

【讨论】:

  • 为什么选择 pg_hba.conf?它没有关于连接数的任何参数,只有如何连接。另一方面,postgresql.conf ......但是数百个连接是一个坏主意,不要这样做,使用连接池或遭受性能问题。 PostgreSQL 8.3 已停产多年,请使用最新版本。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多