Как увеличить максимальное количество подключений в 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

Соединения Postgres Max и общие буферы

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

Добавление к отличному ответу Винни,

Если кто-то не может найти местоположение файла 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

  1. Найдите файл postgresql.conf с помощью команды ниже

найти postgresql.conf

  1. Отредактируйте файл postgresql.conf командой ниже

судо нано /etc/postgresql/14/main/postgresql.conf

  1. Изменять

    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 и перезапустите контейнер/под.

Другие вопросы по тегам