我正在使用Postgres数据库开发我的产品。在使用Slick 3进行批量插入时,出现以下错误信息:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.
我的批量插入操作将超过成千上万条记录。我的Postgres最大连接数是100。
如何增加最大连接数?
我正在使用Postgres数据库开发我的产品。在使用Slick 3进行批量插入时,出现以下错误信息:
org.postgresql.util.PSQLException: FATAL: sorry, too many clients already.
我的批量插入操作将超过成千上万条记录。我的Postgres最大连接数是100。
如何增加最大连接数?
仅仅增加 max_connections
是不够的,还需要同时增加 shared_buffers
和 kernel.shmmax
。
注意事项
max_connections
确定了数据库服务器的最大并发连接数,通常默认值为 100。
在增加连接数之前,您可能需要扩展您的部署。但在此之前,您应该考虑是否真的需要增加连接限制。
每个 PostgreSQL 连接都会消耗 RAM 来管理连接或使用它的客户端。您拥有的连接越多,使用的 RAM 就越多,而这些 RAM 可以用于运行数据库。
一个良好编写的应用程序通常不需要大量的连接。如果您有一个确实需要大量连接的应用程序,则考虑使用像 pg_bouncer 这样的工具,它可以为您汇集连接。因为每个连接都会消耗 RAM,所以您应该尽量减少它们的使用。
如何增加 max connections
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使用的内存量。
2. 更改kernel.shmmax
您需要将内核最大段大小增加到略大于shared_buffers
。
在文件/etc/sysctl.conf
中设置以下参数。 它将在postgresql
重新启动时生效(以下行使内核最大值为96Mb
)。
kernel.shmmax=100663296
参考资料
kernel.shmmax
之前,请检查当前的设置(cat /proc/sys/kernel/shmmax
)。在现代系统中,它已经被设定得非常高,不应进行更改。在我的Ubuntu 18.04上,默认设置为18446744073692774399
。 - Carl Zulauf在Winnie的精彩回答基础上,
如果任何人在您的设置中无法找到postgresql.conf文件位置,您可以随时向Postgres本身询问。
SHOW config_file;
对我来说,仅仅改变max_connections就解决了问题。
编辑: 来自@gies0r的提示:在Ubuntu 18.04中,它在
/etc/postgresql/11/main/postgresql.conf
/etc/postgresql/11/main/postgresql.conf
。 - gies0rpg_settings
:SELECT name, setting FROM pg_settings;
- howMuchCheeseIsTooMuchCheeselocate postgresql.conf
sudo nano /etc/postgresql/14/main/postgresql.conf
将
max_connections = 100 shared_buffers = 24MB
修改为
max_connections = 300
shared_buffers = 80MB
在/var/lib/pgsql/data或/usr/local/pgsql/data/中的postgresql.conf文件中更改max_connections变量。
/opt/homebrew/var/postgresql@14/postgresql.conf