Подтвердить что ты не робот

Как увеличить максимальные соединения в postgres?

Я использую Postgres DB для своего продукта. Выполняя вставку пакета с помощью slick 3, я получаю сообщение об ошибке:

org.postgresql.util.PSQLException: FATAL: извините, слишком много клиентов уже.

Моя операция вставки в пакет будет содержать более тысячи записей. Максимальное соединение для моих postgres равно 100.

Как увеличить максимальные соединения?

4b9b3361

Ответ 1

Простое увеличение 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 не так эффективны, и вы можете найти лучшие результаты, сохраняя их относительно низкими и вместо этого использовать кеш OS. В Windows полезный диапазон составляет от 64 МБ до 512 МБ.

2. Измените kernel.shmmax

Вам нужно увеличить размер сегмента max max, чтобы быть немного больше, чем shared_buffers.

В файле /etc/sysctl.conf задайте параметр, как показано ниже. Он вступит в силу, если postgresql перезагрузится (следующая строка делает ядро max до 96Mb)

kernel.shmmax=100663296

Рекомендации

Максимальное количество подключений и общих буферов Postgres

Настройка сервера PostgreSQL

Ответ 2

изменить переменную max_connections в файле postgresql.conf, расположенном в  /var/lib/pgsql/data или/usr/local/pgsql/data/

Ответ 3

Добавляя к Винни отличный ответ,

Если кто-либо не может найти местоположение файла postgresql.conf в вашей настройке, вы всегда можете спросить себя о postgres.

SHOW config_file;

Для меня только изменение max_connections сделало трюк.