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


108

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

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

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

如何增加最大连接数?



使用连接池,例如pgBouncer或pgPool
Frank Heikens 2015年

2
1.首先检查您的中间件是否没有打开过多的连接或正在泄漏它们。2.(也许)接下来使用连接池。3.(几乎)永远不要增加此类问题的允许连接数,在大多数情况下,这会使情况变得更糟。(除非您绝对确定
否则

Answers:


220

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


注意事项

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

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

每个PostgreSQL连接都会消耗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会比使用较少的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

参考文献

Postgres Max连接和共享缓冲区

调整PostgreSQL服务器


好答案。几个问题.. 100663296如何等于96MB?为什么我们要更改shmmax呢?
Robbo_UK

3
100663296字节= 96 MB(二进制)。shmmax是共享内存段的最大大小。现在,由于我们增加了共享缓冲区的大小,因此我们需要更改shmmax以适应增加的内存以进行缓存。
Ankit

1
@Robbo_UK 96 * 1024 * 1024 = 100663296
skrebbel

6
您可以使用PGTune帮助您确定系统的这些设置
Yoan Tournade

11
cat /proc/sys/kernel/shmmax更改之前,请检查当前的kernel.shmmax设置()。在现代系统上,它的设置已经很高得离谱,不应更改。我18446744073692774399的默认设置是在Ubuntu 18.04上。
卡尔·祖拉夫

30

除了小熊的好答案,

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

SHOW config_file;

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


2
谢谢。在Ubuntu 18.04中,它是/etc/postgresql/11/main/postgresql.conf
gies0r

1

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


2
为什么选择pg_hba.conf?它没有关于连接数量的任何参数,只有如何连接。另一方面,则是postgresql.conf。...但是数百个连接是一个坏主意,请不要这样做,不要使用连接池,否则会遇到性能问题。PostgreSQL 8.3多年处于EOL状态,请使用最新版本。
Frank Heikens 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.