Как увеличить максимальное количество подключений в postgres?
Я использую Postgres DB для моего продукта. При выполнении пакетной вставки с использованием Slick 3, я получаю сообщение об ошибке:
org.postgresql.util.PSQLException: FATAL: извините, слишком много клиентов уже.
Моя операция пакетной вставки будет содержать более тысячи записей. Максимальное соединение для моего postgres составляет 100.
Как увеличить макс соединения?
7 ответов
Просто увеличивается max_connections
плохая идея Вам нужно увеличить shared_buffers
а также kernel.shmmax
также.
Соображения
max_connections
определяет максимальное количество одновременных подключений к серверу базы данных. По умолчанию обычно используется 100 соединений.
Прежде чем увеличивать количество подключений, вам может потребоваться увеличить развертывание. Но перед этим вы должны подумать, действительно ли вам нужно увеличить лимит соединения.
Каждое соединение PostgreSQL использует оперативную память для управления соединением или клиентом, использующим его. Чем больше у вас подключений, тем больше оперативной памяти вы будете использовать, чтобы вместо этого использовать базу данных.
Хорошо написанное приложение обычно не требует большого количества соединений. Если у вас есть приложение, которое требует большого количества подключений, подумайте об использовании такого инструмента, как pg_bouncer, который может объединять подключения для вас. Поскольку каждое соединение потребляет оперативную память, вы должны стремиться минимизировать их использование.
Как увеличить максимальное количество соединений
1. Увеличить max_connection
а также shared_buffers
в /var/lib/pgsql/data/postgresql.conf
менять
max_connections = 100
shared_buffers = 24MB
в
max_connections = 300
shared_buffers = 80MB
shared_buffers
Параметр конфигурации определяет, сколько памяти выделено PostgreSQL для использования для кэширования данных.
- Если у вас есть система с 1 ГБ или более ОЗУ, разумное начальное значение для shared_buffers составляет 1/4 памяти в вашей системе.
- вряд ли вы обнаружите, что более 40% оперативной памяти работает лучше, чем меньшее количество (например, 25%)
- Имейте в виду, что если ваша система или сборка PostgreSQL 32-битная, может быть нецелесообразно устанавливать shared_buffers выше 2 ~ 2,5 ГБ.
- Обратите внимание, что в Windows большие значения для shared_buffers не так эффективны, и вы можете найти лучшие результаты, сохраняя их относительно низкими и используя вместо этого больше кэша ОС. В Windows полезный диапазон составляет от 64 МБ до 512 МБ.
2. Измените kernel.shmmax
Вам нужно будет увеличить максимальный размер сегмента ядра, чтобы он был немного больше, чем shared_buffers
,
В файле /etc/sysctl.conf
установите параметр, как показано ниже. Это вступит в силу, когда postgresql
перезагружается (следующая строка делает ядро максимально 96Mb
)
kernel.shmmax=100663296
Рекомендации
Как увеличить максимальное количество подключений в postgres
Добавление к отличному ответу Винни,
Если кто-то не может найти местоположение файла postgresql.conf в вашей настройке, вы всегда можете спросить сам postgres.
SHOW config_file;
Для меня изменение только max_connections сделало трюк.
Если ваш экземпляр postgres размещен в Amazon RDS, Amazon настраивает для вас максимальное количество подключений в зависимости от объема доступной памяти.
В их документации говорится, что вы получаете 112 подключений на 1 ГБ памяти (с ограничением в 5000 подключений, независимо от того, сколько у вас памяти), но мы обнаружили, что стали получать сообщения об ошибках ближе к 80 подключениям в экземпляре только с 1 ГБ памяти. Увеличение до 2 ГБ позволило нам без проблем использовать 110 соединений (и, возможно, больше, но это максимум, что мы пробовали до сих пор). Мы смогли увеличить память существующего экземпляра с 1 ГБ до 2 ГБ всего за несколько минут довольно легко.
Вот ссылка на соответствующую документацию Amazon:
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections
- Найдите файл postgresql.conf с помощью команды ниже
найти postgresql.conf
- Отредактируйте файл postgresql.conf командой ниже
судо нано /etc/postgresql/14/main/postgresql.conf
Изменять
max_connections = 100shared_buffers = 24 МБ
к
max_connections = 300
shared_buffers = 80MB
Изменить переменную max_connections в файле postgresql.conf, расположенном в /var/lib/pgsql/data или /usr/local/pgsql/data/
Для пользователей Mac M1
/opt/homebrew/var/postgresql@14/postgresql.conf
для postgres 13, работающего в docker/kubernetes, путь: /var/lib/postgresql/data/postgressql.conf, обновите max_connections = 300 и перезапустите контейнер/под.